package com.jspxcms.core.web.method; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import com.jspxcms.core.service.NodeQueryService; import com.jspxcms.core.support.ForeContext; import freemarker.core.Environment; import freemarker.template.TemplateMethodModelEx; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; import freemarker.template.TemplateNumberModel; import freemarker.template.TemplateScalarModel; /** * GetNodeMethod * * @author liufang * */ public class GetNodeMethod implements TemplateMethodModelEx { @SuppressWarnings("rawtypes") public Object exec(List args) throws TemplateModelException { if (args.size() > 1) { throw new TemplateModelException("Wrong arguments"); } if (args.size() < 1) { Environment env = Environment.getCurrentEnvironment(); Integer siteId = ForeContext.getSiteId(env); return query.findRoot(siteId); } TemplateModel model = (TemplateModel) args.get(0); if (model instanceof TemplateNumberModel) { Integer id = ((TemplateNumberModel) model).getAsNumber().intValue(); return query.get(id); } else if (model instanceof TemplateScalarModel) { String number = ((TemplateScalarModel) model).getAsString(); Environment env = Environment.getCurrentEnvironment(); Integer siteId = ForeContext.getSiteId(env); return query.findByNumber(siteId, number); } else { throw new TemplateModelException( "The arg0 must be a number or a string."); } } @Autowired private NodeQueryService query; }