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

sf.database.template.freemarker.ext.TupleModel Maven / Gradle / Ivy

The newest version!
package sf.database.template.freemarker.ext;

import freemarker.core.Environment;
import freemarker.template.TemplateMethodModelEx;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
import sf.database.template.TemplateConstants;
import sf.database.template.enjoy.ext.TupleDirective;
import sf.database.template.freemarker.FreemarkerHelp;
import sf.spring.util.CollectionUtils;
import sf.tools.StringUtils;

import java.util.List;
import java.util.Map;

public class TupleModel implements TemplateMethodModelEx {
    @Override
    public Object exec(List arguments) throws TemplateModelException {
        Environment env = Environment.getCurrentEnvironment();
        Map map = (Map) FreemarkerHelp.getRootDataModel(env);
        List list = (List) map.get(TemplateConstants.SQL_PARA_KEY);
        if (list == null) {
            throw new RuntimeException("tuple model invoked by List method only");
        }
        if (CollectionUtils.isNotEmpty(arguments)) {
            int splitSize = 0;
            Object expr = arguments.get(0);
            if (expr instanceof TemplateModel) {
                Object obj = FreemarkerHelp.getUnwrap((TemplateModel) expr);
                if (obj instanceof Number) {
                    splitSize = ((Number) obj).intValue();
                }
            }
            Object key = arguments.get(1);
            if (key instanceof TemplateModel) {
                Object obj = FreemarkerHelp.getUnwrap((TemplateModel) key);
                String str = obj == null ? null : String.valueOf(obj);
                if (StringUtils.isNotBlank(str)) {
                    Object value = map.get(str);
                    return TupleDirective.tuple(splitSize, value, list);
                }
            }
        }
        return "";
    }
}