package com.jspxcms.core.web.directive;
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import com.jspxcms.common.freemarker.Freemarkers;
import com.jspxcms.common.orm.Limitable;
import com.jspxcms.core.domain.Info;
import com.jspxcms.core.fulltext.InfoFulltextService;
import com.jspxcms.core.support.ForeContext;
import freemarker.core.Environment;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
import freemarker.template.TemplateModelException;
/**
* AbstractInfoFulltextListPageDirective
*
* @author liufang
*
*/
public abstract class AbstractInfoFulltextListPageDirective {
public static final String SITE_ID = "siteId";
public static final String NODE_ID = "nodeId";
// public static final String NODE = "node";
// public static final String NODE_NUMBER = "nodeNumber";
// public static final String ATTR_ID = "attrId";
// public static final String ATTR = "attr";
// public static final String SPECIAL_ID = "specialId";
// public static final String SPECIAL_TITLE = "specialTitle";
// public static final String TAG = "tag";
// public static final String TAG_ID = "tagId";
// public static final String TAG_NAME = "tagName";
// public static final String USER = "user";
// public static final String USER_ID = "userId";
// public static final String PRIORITY = "priority";
public static final String START_DATE = "startDate";
public static final String END_DATE = "endDate";
public static final String Q = "q";
public static final String TITLE = "title";
// public static final String INCLUDE_ID = "includeId";
public static final String EXCLUDE_ID = "excludeId";
public static final String STATUS = "status";
// public static final String IS_INCLUDE_CHILDREN = "isIncludeChildren";
// public static final String IS_MAIN_NODE_ONLY = "isMainNodeOnly";
// public static final String IS_WITH_IMAGE = "isWithImage";
@SuppressWarnings({ "unchecked", "rawtypes" })
public void doExecute(Environment env, Map params,
TemplateModel[] loopVars, TemplateDirectiveBody body, boolean isPage)
throws TemplateException, IOException {
if (loopVars.length < 1) {
throw new TemplateModelException("Loop variable is required.");
}
if (body == null) {
throw new RuntimeException("missing body");
}
Integer[] siteId = Freemarkers.getIntegers(params, SITE_ID);
if (siteId == null && params.get(SITE_ID) == null) {
siteId = new Integer[] { ForeContext.getSiteId(env) };
}
Integer[] nodeId = Freemarkers.getIntegers(params, NODE_ID);
Date startDate = Freemarkers.getDate(params, START_DATE);
Date endDate = Freemarkers.getEndDate(params, END_DATE);
String q = Freemarkers.getString(params, Q);
String title = Freemarkers.getString(params, TITLE);
Integer[] excludeId = Freemarkers.getIntegers(params, EXCLUDE_ID);
String[] status = Freemarkers.getStrings(params, STATUS);
if (isPage) {
Pageable pageable = Freemarkers.getPageable(params, env);
Page<Info> pagedList = fulltext.page(siteId, nodeId, null,
startDate, endDate, status, excludeId, q, title, null,
null, null, pageable);
ForeContext.setTotalPages(pagedList.getTotalPages());
loopVars[0] = env.getObjectWrapper().wrap(pagedList);
} else {
Limitable limitable = Freemarkers.getLimitable(params);
List<Info> list = fulltext.list(siteId, nodeId, null, startDate,
endDate, status, excludeId, q, title, null, null, null,
limitable);
loopVars[0] = env.getObjectWrapper().wrap(list);
}
body.render(env.getOut());
}
@Autowired
private InfoFulltextService fulltext;
}