All Downloads are FREE. Search and download functionalities are using the official Maven repository.

webit.script.Function Maven / Gradle / Ivy

The newest version!
// Copyright (c) 2013, Webit Team. All Rights Reserved.
package webit.script;

import java.io.OutputStream;
import java.io.Writer;
import webit.script.io.Out;
import webit.script.io.impl.DiscardOut;
import webit.script.io.impl.OutputStreamOut;
import webit.script.io.impl.WriterOut;
import webit.script.lang.MethodDeclare;
import webit.script.util.KeyValuesUtil;

/**
 * Exported function.
 * 
 * @since 1.5.0
 * @author zqq
 */
public class Function {

    protected final Template container;
    protected final MethodDeclare methodDeclare;
    protected final Out defaultOut;

    public Function(Template container, MethodDeclare methodDeclare) {
        this(container, methodDeclare, container.engine.getEncoding(), false);
    }

    public Function(Template container, MethodDeclare methodDeclare, String encoding, boolean isByteStream) {
        this(container, methodDeclare, new DiscardOut(encoding, isByteStream));
    }

    public Function(Template container, MethodDeclare methodDeclare, Out defaultOut) {
        this.methodDeclare = methodDeclare;
        this.container = container;
        this.defaultOut = defaultOut;
    }

    protected Context createContext(Out out) {
        return new Context(this.container, out, KeyValuesUtil.EMPTY_KEY_VALUES);
    }

    protected Context createContext() {
        return createContext(defaultOut);
    }

    protected Object _invoke(Context context, Object... args) {
        return this.methodDeclare.invoke(context, args);
    }

    public Object invoke(Object... args) {
        return _invoke(createContext(), args);
    }

    public Object invokeWithOut(Out out, Object... args) {
        return _invoke(createContext(out), args);
    }

    public Object invokeWithOut(Writer writer, Object... args) {
        return invokeWithOut(new WriterOut(writer, container.engine), args);
    }

    public Object invokeWithOut(final OutputStream outputStream, Object... args) {
        return invokeWithOut(new OutputStreamOut(outputStream, container.engine), args);
    }

    public Object invokeWithOut(final String encoding, final OutputStream outputStream, Object... args) {
        return invokeWithOut(new OutputStreamOut(outputStream, encoding, container.engine), args);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy