/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.publication.preview.service; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Random; import org.springframework.context.MessageSource; import org.springframework.context.MessageSourceAware; import org.springframework.context.support.MessageSourceAccessor; import org.springframework.util.Assert; import com.ewcms.common.message.EwcmsMessageSource; import com.ewcms.content.document.model.Article; import com.ewcms.content.document.model.Article.Status; import com.ewcms.content.document.model.Article.Type; import com.ewcms.content.document.model.Category; import com.ewcms.content.document.model.Content; import com.ewcms.publication.service.ArticlePublishServiceable; /** * 为预览提供文章数据。 * <p> * 为了预览模版和文章的样式,提供所需要的文章数据。 * * @author wangwei */ public class ArticlePublishServiceWrapper implements ArticlePublishServiceable,MessageSourceAware{ public static final long PREVIEW_ARTICLE_ID = -10000L; private static final Random random = new Random(); private MessageSourceAccessor messages = EwcmsMessageSource.getAccessor(); private final ArticlePublishServiceable service; private final boolean mock; public ArticlePublishServiceWrapper(ArticlePublishServiceable articlePublishService,boolean mock){ Assert.notNull(articlePublishService,"articlePublishService must setting"); this.service = articlePublishService; this.mock = mock; } Article getArticleMock(){ Article article = service.getArticle(PREVIEW_ARTICLE_ID); article = (article == null ? newDefaultArticleMock() : article); return article; } @Override public Article getArticle(Long id) { if(mock){ return getArticleMock(); } return service.getArticle(id); } @Override public void publishArticleSuccess(Long id, String url) { throw new RuntimeException("it's not instance."); } @Override public List<Article> findPublishArticles(Integer channelId, Boolean forceAgain, Integer limit) { throw new RuntimeException("it's not instance."); } @Override public List<Article> findChildChannelArticleReleasePage(Integer channelId, Integer page, Integer row, Boolean top) { if(mock){ Article article = getArticleMock(); return releaseArticlesMock(article,row); } return service.findArticleReleasePage(channelId, page, row, top); } private List<Article> releaseArticlesMock(Article article,int row){ List<Article> articles = new ArrayList<Article>(); for(int i = 0 ; i < row ; i++){ articles.add(copyToNewArticle(article)); } return articles; } @Override public List<Article> findArticleReleasePage(Integer channelId, Integer page, Integer row, Boolean top) { if(mock){ Article article = getArticleMock(); return releaseArticlesMock(article,row); } return service.findArticleReleasePage(channelId, page, row, top); } @Override public int getArticleReleaseCount(Integer channelId) { if(mock){ return 1000; } return service.getArticleReleaseCount(channelId); } @Override public void setMessageSource(MessageSource messageSource) { this.messages = new MessageSourceAccessor(messageSource); } /** * 创建缺省的模拟文章 * * @return */ private Article newDefaultArticleMock(){ Date now = new Date(); Article article = new Article(); article.setId(PREVIEW_ARTICLE_ID); article.setAuthor(messages.getMessage("preview.artilce.author")); article.setKeyword(messages.getMessage("preview.artilce.keyword")); article.setOrigin(messages.getMessage("preview.artilce.origin")); article.setOwner(messages.getMessage("preview.artilce.owner")); article.setShortTitle(messages.getMessage("preview.artilce.shortTitle")); article.setSubTitle(messages.getMessage("preview.artilce.subTitle")); article.setSummary(messages.getMessage("preview.artilce.summary")); article.setTag(messages.getMessage("preview.artilce.tag")); article.setTitle(messages.getMessage("preview.artilce.title")); article.setContentTotal(7); article.setInside(false); article.setComment(true); article.setCreateTime(now); article.setDelete(false); article.setModified(now); article.setPublished(now); article.setStatus(Status.RELEASE); article.setType(Type.GENERAL); article.setUrl("#"); List<Category> categories = new ArrayList<Category>(); String categoryContent = messages.getMessage("preview.artilce.categories"); for(String c : categoryContent.split(",")){ Category category = new Category(); category.setCategoryName(c); categories.add(category); } article.setCategories(categories); List<Content> contents = new ArrayList<Content>(); Content content = new Content(); content.setDetail("preview.artilce.content"); content.setPage(1); article.setContents(contents); return article; } /** * 拷贝已有的文章到新文章对象中 * </p> * 只用于文章列表显示,不拷贝文章内容。 * * @param article 文章对象 * @return */ private Article copyToNewArticle(Article article){ Article newArticle = new Article(); newArticle.setId(Math.abs(random.nextLong())); newArticle.setAuthor(article.getAuthor()); newArticle.setComment(article.getComment()); newArticle.setContentTotal(article.getContentTotal()); newArticle.setCreateTime(article.getCreateTime()); newArticle.setDelete(article.getDelete()); newArticle.setInside(article.getInside()); newArticle.setKeyword(article.getKeyword()); newArticle.setModified(article.getModified()); newArticle.setOrigin(article.getOrigin()); newArticle.setOwner(article.getOwner()); newArticle.setPublished(article.getPublished()); newArticle.setShortTitle(article.getShortTitle()); newArticle.setStatus(article.getStatus()); newArticle.setSubTitle(article.getSubTitle()); newArticle.setSummary(article.getSummary()); newArticle.setTag(article.getTag()); newArticle.setTitle(article.getTitle()); newArticle.setType(article.getType()); newArticle.setUrl(article.getUrl()); return newArticle; } }