/**
* 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.task.impl;
import java.util.ArrayList;
import java.util.List;
import com.ewcms.core.site.model.Channel;
import com.ewcms.core.site.model.Site;
import com.ewcms.core.site.model.Template;
import com.ewcms.publication.service.ArticlePublishServiceable;
import com.ewcms.publication.service.ChannelPublishServiceable;
import com.ewcms.publication.service.ResourcePublishServiceable;
import com.ewcms.publication.service.TemplatePublishServiceable;
import com.ewcms.publication.service.TemplateSourcePublishServiceable;
import com.ewcms.publication.task.Taskable;
import com.ewcms.publication.task.impl.process.TaskProcessable;
import freemarker.template.Configuration;
/**
* 发布频道任务
* <br>
* 发布频道下所有需要发布的资源和任务(如:首页,文章等)
*
* @author wangwei
*/
public class ChannelTask extends TaskBase{
public static class Builder extends BaseBuilder<Builder>{
private final Configuration cfg;
private final ChannelPublishServiceable channelService;
private final TemplatePublishServiceable templateService;
private final TemplateSourcePublishServiceable templateSourceService;
private final ResourcePublishServiceable resourceService;
private final ArticlePublishServiceable articleService;
private final Channel channel;
private boolean publishChildren = false;
public Builder(Configuration cfg,
TemplatePublishServiceable templateService,
TemplateSourcePublishServiceable templateSourceService,
ResourcePublishServiceable resourceService,
ArticlePublishServiceable articleService,
ChannelPublishServiceable channelService,
Site site,Channel channel){
super(site);
this.cfg = cfg;
this.templateService = templateService;
this.templateSourceService = templateSourceService;
this.resourceService = resourceService;
this.articleService = articleService;
this.channelService = channelService;
this.channel = channel;
}
public Builder setPublishChildren(boolean publishChildren){
this.publishChildren = publishChildren;
return this;
}
@Override
public String getDescription() {
return String.format("%s频道发布",channel.getName());
}
private void dependenceResourceAndTemplateSource(List<Taskable> dependences){
dependences.add(
new TemplateSourceTask
.Builder(templateSourceService,site)
.setUsername(username)
.build());
dependences.add(
new ResourceTask
.Builder(resourceService,site)
.setUsername(username)
.build());
}
private void dependenceTemplate(List<Taskable> dependences){
List<Template> templates = templateService.getTemplatesInChannel(channel.getId());
for(Template template : templates){
Taskable task = new TemplateTask.Builder(
cfg, templateSourceService, resourceService,
articleService, templateService, site, channel, template)
.setDependence(true)
.setUsername(username)
.setAgain(again)
.build();
dependences.add(task);
}
}
private void dependenceChildren(List<Taskable> dependences){
List<Channel> children = channelService.getChannelChildren(channel.getId());
if(children == null || children.isEmpty()){
return ;
}
for(Channel child : children){
dependences.add(
new ChannelTask.Builder(
cfg, templateService, templateSourceService, resourceService,
articleService, channelService,site,child)
.setAgain(again)
.setUsername(username)
.setDependence(true)
.setPublishChildren(true)
.build());
}
}
public List<Taskable> getDependenceTasks(){
List<Taskable> dependences = new ArrayList<Taskable>();
if(!dependence){
dependenceResourceAndTemplateSource(dependences);
}
if(channel.getPublicenable()){
dependenceTemplate(dependences);
}
if(publishChildren){
dependenceChildren(dependences);
}
return dependences;
}
@Override
public List<TaskProcessable> getTaskProcesses() {
return new ArrayList<TaskProcessable>(0);
}
}
public ChannelTask(String id,Builder builder){
super(id,builder);
}
}