/** * 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; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ewcms.core.site.model.Channel; import com.ewcms.core.site.model.Site; import com.ewcms.core.site.model.Template; import com.ewcms.core.site.model.Template.TemplateType; import com.ewcms.publication.service.ArticlePublishServiceable; import com.ewcms.publication.service.ChannelPublishServiceable; import com.ewcms.publication.service.ResourcePublishServiceable; import com.ewcms.publication.service.SitePublishServiceable; import com.ewcms.publication.service.TemplatePublishServiceable; import com.ewcms.publication.service.TemplateSourcePublishServiceable; import com.ewcms.publication.task.TaskException; import com.ewcms.publication.task.TaskRegistryable; import com.ewcms.publication.task.Taskable; import com.ewcms.publication.task.impl.ChannelTask; import com.ewcms.publication.task.impl.DetailTask; import com.ewcms.publication.task.impl.ResourceTask; import com.ewcms.publication.task.impl.SiteTask; import com.ewcms.publication.task.impl.TemplateSourceTask; import com.ewcms.publication.task.impl.TemplateTask; import freemarker.template.Configuration; /** * 实现发布服务 * * @author wangwei */ public class PublishService implements PublishServiceable { private static final Logger logger = LoggerFactory.getLogger(PublishService.class); private ChannelPublishServiceable channelService; private ArticlePublishServiceable articleService; private TemplatePublishServiceable templateService; private SitePublishServiceable siteService; private ResourcePublishServiceable resourceService; private TemplateSourcePublishServiceable templateSourceService; private Configuration cfg; private TaskRegistryable taskRegistry; /** * 得到站点对象 * </br> * 站点不存在抛出异常 * * @param siteId 站点编号 * @return * @throws PublishException */ private Site getSite(Integer siteId)throws PublishException{ Site site = siteService.getSite(siteId); if(site == null){ logger.error("Site id is {},but site is null",siteId); throw new PublishException("Sit is null"); } return site; } @Override public void publishTemplateSource(int siteId,int[] publishIds,String username) throws PublishException { Site site = getSite(siteId); Taskable task = new TemplateSourceTask. Builder(templateSourceService, site). setPublishIds(publishIds). setUsername(username). setAgain(true). build(); taskRegistry.registerNewTask(site,task); } @Override public void publishTemplateSourceBySite(int siteId, boolean again,String username)throws PublishException { Site site = getSite(siteId); Taskable task = new TemplateSourceTask. Builder(templateSourceService, site). setAgain(again). setUsername(username). build(); taskRegistry.registerNewTask(site,task); } @Override public void publishResource(int siteId,int[] publishIds,String username) throws PublishException { Site site = getSite(siteId); Taskable task = new ResourceTask.Builder(resourceService, site). setAgain(true). setPublishIds(publishIds). setUsername(username). build(); taskRegistry.registerNewTask(site,task); } @Override public void publishResourceBySite(int siteId, boolean again,String username)throws PublishException { Site site = getSite(siteId); Taskable task = new ResourceTask.Builder(resourceService, site). setAgain(again). setUsername(username). build(); taskRegistry.registerNewTask(site,task); } @Override public void publishTemplate(int templateId, boolean again,String username)throws PublishException { Template template = templateService.getTemplate(templateId); if(template == null){ logger.error("Template id is {},but templet is null",templateId); throw new PublishException("Template is null"); } Site site = template.getSite(); Channel channel = channelService.getChannel(template.getChannelId()); Taskable task = new TemplateTask.Builder( cfg,templateSourceService,resourceService, articleService,templateService,site,channel,template). setAgain(again). setUsername(username). build(); taskRegistry.registerNewTask(site,task); } private Channel getChannel(Integer channelId)throws PublishException{ Channel channel = channelService.getChannel(channelId); if(channel == null){ logger.error("Channel id is {},Channel is null",channelId); throw new PublishException("Channel is null"); } return channel; } @Override public void publishChannel(int channelId, boolean chidren, boolean again, String username) throws PublishException { Channel channel = getChannel(channelId); Site site = channel.getSite(); Taskable task = new ChannelTask.Builder( cfg, templateService, templateSourceService, resourceService, articleService, channelService, site, channel). setPublishChildren(chidren). setAgain(again). setUsername(username). build(); taskRegistry.registerNewTask(site,task); } @Override public void publishSite(int siteId, boolean again, String username) throws PublishException { Site site = getSite(siteId); Taskable task = new SiteTask.Builder( cfg, templateService, templateSourceService, resourceService, articleService, channelService, site). setUsername(username). setAgain(again). build(); taskRegistry.registerNewTask(site,task); } @Override public void publishArticle(int channelId, long[] publishIds, String username) throws PublishException { Channel channel = getChannel(channelId); Site site = channel.getSite(); List<Template> templates = templateService.getTemplatesInChannel(channelId); for(Template template : templates){ if(template.getType() != TemplateType.DETAIL){ continue; } Taskable task = new DetailTask.Builder( cfg, templateSourceService, resourceService, articleService, site, channel, template). setUsername(username). setAgain(true). setPublishIds(publishIds). build(); taskRegistry.registerNewTask(site,task); } } @Override public void removePublish(Integer siteId,String id, String username)throws PublishException { try{ taskRegistry.removeTask(siteId, id, username); }catch(TaskException e){ throw new PublishException(e); } } @Override public void closeSitePublish(Integer siteId) { taskRegistry.closeSite(siteId); } @Override public List<Taskable> getSitePublishTasks(Integer siteId) { return taskRegistry.getSiteTasks(siteId); } public void setArticleService(ArticlePublishServiceable articleService) { this.articleService = articleService; } public void setChannelService(ChannelPublishServiceable channelService) { this.channelService = channelService; } public void setTemplateService(TemplatePublishServiceable templateService) { this.templateService = templateService; } public void setSiteService(SitePublishServiceable siteService) { this.siteService = siteService; } public void setResourceService(ResourcePublishServiceable resourceService) { this.resourceService = resourceService; } public void setTemplateSourceService( TemplateSourcePublishServiceable templateSourceService) { this.templateSourceService = templateSourceService; } public void setTaskRegistry(TaskRegistryable taskRegistry){ this.taskRegistry = taskRegistry; } public void setConfiguration(Configuration cfg){ this.cfg = cfg; } }