package com.kingschan.blog.common.freemarker.directive.article;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.kingschan.blog.dao.Pagination;
import com.kingschan.blog.services.impl.ArticleServiceImpl;
import freemarker.core.Environment;
import freemarker.template.ObjectWrapper;
import freemarker.template.TemplateDirectiveBody;
import freemarker.template.TemplateDirectiveModel;
import freemarker.template.TemplateException;
import freemarker.template.TemplateModel;
/**
*
* <pre>
* 类名称:文章时间轴
* 类描述:
* 创建人:陈国祥 (kingschan)
* 创建时间:2016-2-20 下午3:20:55
* 修改人:Administrator
* 修改时间:2016-2-20 下午3:20:55
* 修改备注:
* @version V1.0
* </pre>
*/
@Component("ArticleTimeLineItems")
public class ArticleTimeLineItemsDirective implements TemplateDirectiveModel {
@Autowired
private ArticleServiceImpl articleServ;
@Override
public void execute(Environment env, @SuppressWarnings("rawtypes") Map params, TemplateModel[] tm, TemplateDirectiveBody body)
throws TemplateException, IOException {
//如果limit ==0就是查出所有
int limit =params.containsKey("limit")&¶ms.get("limit").toString().matches("\\d+")?Integer.valueOf(params.get("limit").toString()):10;
int page =params.containsKey("page")&¶ms.get("page").toString().matches("\\d+")?Integer.valueOf(params.get("page").toString()):1;
String websiteid=params.get("website_id").toString();
String date=params.containsKey("date")&¶ms.get("date").toString().matches("\\d{4}-\\d{2}")?params.get("date").toString():null;
// String orderby=params.containsKey("orderby")?params.get("orderby").toString():null;//标签
//lableName
try {
Pagination p =articleServ.getArticleTimeLine(websiteid, page, limit,date);
@SuppressWarnings("unchecked")
List<Map<String, Object>> lis = (List<Map<String, Object>>) p.getData();
TreeMap<String, List<Map<String, Object>>> tmap =new TreeMap<String, List<Map<String,Object>>>( new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
});
String current=null;
for (Map<String, Object> map : lis) {
String key =map.get("months").toString().trim();
List<Map<String, Object>> tlis=null;
if (null==current||!current.equals(key)) {
//第一次
tlis= new ArrayList<Map<String,Object>>();
tlis.add(map);
tmap.put(key, tlis);
current=key;
}else if (current.equals(key)) {
//相同key
tlis=tmap.get(key);
tlis.add(map);
tmap.put(key, tlis);
current=key;
}
}
env.setVariable("article_items", ObjectWrapper.DEFAULT_WRAPPER.wrap(tmap));
env.setVariable("page", ObjectWrapper.DEFAULT_WRAPPER.wrap(p));
body.render(env.getOut());
} catch (Exception e) {
e.printStackTrace();
}
}
}