/**
* Copyright © 2012-2013 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
*/
package com.thinkgem.jeesite.modules.cms.utils;
import java.util.List;
import java.util.Map;
import com.thinkgem.jeesite.common.config.Global;
import org.apache.commons.lang.StringUtils;
import com.thinkgem.jeesite.common.mapper.JsonMapper;
import com.thinkgem.jeesite.common.persistence.Page;
import com.thinkgem.jeesite.common.utils.CacheUtils;
import com.thinkgem.jeesite.common.utils.SpringContextHolder;
import com.thinkgem.jeesite.modules.cms.entity.Article;
import com.thinkgem.jeesite.modules.cms.entity.Category;
import com.thinkgem.jeesite.modules.cms.entity.Link;
import com.thinkgem.jeesite.modules.cms.entity.Site;
import com.thinkgem.jeesite.modules.cms.service.ArticleService;
import com.thinkgem.jeesite.modules.cms.service.CategoryService;
import com.thinkgem.jeesite.modules.cms.service.LinkService;
import com.thinkgem.jeesite.modules.cms.service.SiteService;
import javax.servlet.ServletContext;
/**
* 内容管理工具类
* @author ThinkGem
* @version 2013-5-29
*/
public class CmsUtils {
private static SiteService siteService = SpringContextHolder.getBean(SiteService.class);
private static CategoryService categoryService = SpringContextHolder.getBean(CategoryService.class);
private static ArticleService articleService = SpringContextHolder.getBean(ArticleService.class);
private static LinkService linkService = SpringContextHolder.getBean(LinkService.class);
private static ServletContext context = SpringContextHolder.getBean(ServletContext.class);
private static final String CMS_CACHE = "cmsCache";
/**
* 获得站点列表
*/
public static List<Site> getSiteList(){
@SuppressWarnings("unchecked")
List<Site> siteList = (List<Site>)CacheUtils.get(CMS_CACHE, "siteList");
if (siteList == null){
Page<Site> page = new Page<Site>(1, -1);
page = siteService.find(page, new Site());
siteList = page.getList();
CacheUtils.put(CMS_CACHE, "siteList", siteList);
}
return siteList;
}
/**
* 获得站点信息
* @param siteId 站点编号
*/
public static Site getSite(String siteId){
String id = "1";
if (StringUtils.isNotBlank(siteId)){
id = siteId;
}
for (Site site : getSiteList()){
if (site.getId().equals(id)){
return site;
}
}
return new Site(id);
}
/**
* 获得主导航列表
* @param siteId 站点编号
*/
public static List<Category> getMainNavList(String siteId){
@SuppressWarnings("unchecked")
List<Category> mainNavList = (List<Category>)CacheUtils.get(CMS_CACHE, "mainNavList_"+siteId);
if (mainNavList == null){
Category category = new Category();
category.setSite(new Site(siteId));
category.setParent(new Category("1"));
category.setInMenu(Category.SHOW);
Page<Category> page = new Page<Category>(1, -1);
page = categoryService.find(page, category);
mainNavList = page.getList();
CacheUtils.put(CMS_CACHE, "mainNavList_"+siteId, mainNavList);
}
return mainNavList;
}
/**
* 获取栏目
* @param categoryId 栏目编号
* @return
*/
public static Category getCategory(String categoryId){
return categoryService.get(categoryId);
}
/**
* 获得栏目列表
* @param siteId 站点编号
* @param parentId 分类父编号
* @param number 获取数目
* @param param 预留参数,例: key1:'value1', key2:'value2' ...
*/
public static List<Category> getCategoryList(String siteId, String parentId, int number, String param){
Page<Category> page = new Page<Category>(1, number, -1);
Category category = new Category();
category.setSite(new Site(siteId));
category.setParent(new Category(parentId));
if (StringUtils.isNotBlank(param)){
@SuppressWarnings({ "unused", "rawtypes" })
Map map = JsonMapper.getInstance().fromJson("{"+param+"}", Map.class);
}
page = categoryService.find(page, category);
return page.getList();
}
/**
* 获取栏目
* @param categoryIds 栏目编号
* @return
*/
public static List<Category> getCategoryListByIds(String categoryIds){
return categoryService.findByIds(categoryIds);
}
/**
* 获取文章
* @param articleId 文章编号
* @return
*/
public static Article getArticle(String articleId){
return articleService.get(articleId);
}
/**
* 获取文章列表
* @param siteId 站点编号
* @param categoryId 分类编号
* @param number 获取数目
* @param param 预留参数,例: key1:'value1', key2:'value2' ...
* posid 推荐位(1:首页焦点图;2:栏目页文章推荐;)
* image 文章图片(1:有图片的文章)
* orderBy 排序字符串
* @return
*/
public static List<Article> getArticleList(String siteId, String categoryId, int number, String param){
Page<Article> page = new Page<Article>(1, number, -1);
Article article = new Article(new Category(categoryId, new Site(siteId)));
if (StringUtils.isNotBlank(param)){
@SuppressWarnings({ "rawtypes" })
Map map = JsonMapper.getInstance().fromJson("{"+param+"}", Map.class);
if (new Integer(1).equals(map.get("posid")) || new Integer(2).equals(map.get("posid"))){
article.setPosid(String.valueOf(map.get("posid")));
}
if (new Integer(1).equals(map.get("image"))){
article.setImage(Article.YES);
}
if (StringUtils.isNotBlank((String)map.get("orderBy"))){
page.setOrderBy((String)map.get("orderBy"));
}
}
article.setDelFlag(Article.DEL_FLAG_NORMAL);
page = articleService.find(page, article, false);
return page.getList();
}
/**
* 获取链接
* @param linkId 文章编号
* @return
*/
public static Link getLink(String linkId){
return linkService.get(linkId);
}
/**
* 获取链接列表
* @param siteId 站点编号
* @param categoryId 分类编号
* @param number 获取数目
* @param param 预留参数,例: key1:'value1', key2:'value2' ...
* @return
*/
public static List<Link> getLinkList(String siteId, String categoryId, int number, String param){
Page<Link> page = new Page<Link>(1, number, -1);
Link link = new Link(new Category(categoryId, new Site(siteId)));
if (StringUtils.isNotBlank(param)){
@SuppressWarnings({ "unused", "rawtypes" })
Map map = JsonMapper.getInstance().fromJson("{"+param+"}", Map.class);
}
link.setDelFlag(Link.DEL_FLAG_NORMAL);
page = linkService.find(page, link, false);
return page.getList();
}
// ============== Cms Cache ==============
public static Object getCache(String key) {
return CacheUtils.get(CMS_CACHE, key);
}
public static void putCache(String key, Object value) {
CacheUtils.put(CMS_CACHE, key, value);
}
public static void removeCache(String key) {
CacheUtils.remove(CMS_CACHE, key);
}
/**
* 获得文章动态URL地址
* @param article
* @return url
*/
public static String getUrlDynamic(Article article) {
if(StringUtils.isNotBlank(article.getLink())){
return article.getLink();
}
StringBuilder str = new StringBuilder();
str.append(context.getContextPath()).append(Global.getFrontPath());
str.append("/view-").append(article.getCategory().getId()).append("-").append(article.getId()).append(Global.getUrlSuffix());
return str.toString();
}
/**
* 获得栏目动态URL地址
* @param category
* @return url
*/
public static String getUrlDynamic(Category category) {
if(StringUtils.isNotBlank(category.getHref())){
if(!category.getHref().contains("://")){
return context.getContextPath()+Global.getFrontPath()+category.getHref();
}else{
return category.getHref();
}
}
StringBuilder str = new StringBuilder();
str.append(context.getContextPath()).append(Global.getFrontPath());
str.append("/list-").append(category.getId()).append(Global.getUrlSuffix());
return str.toString();
}
/**
* 从图片地址中去除ContextPath地址
* @param src
* @return src
*/
public static String formatImageSrcToDb(String src) {
if(StringUtils.isBlank(src)) return src;
if(src.startsWith(context.getContextPath() + "/userfiles")){
return src.substring(context.getContextPath().length());
}else{
return src;
}
}
/**
* 从图片地址中加入ContextPath地址
* @param src
* @return src
*/
public static String formatImageSrcToWeb(String src) {
if(StringUtils.isBlank(src)) return src;
if(src.startsWith(context.getContextPath() + "/userfiles")){
return src;
}else{
return context.getContextPath()+src;
}
}
}