/** * 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.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.core.site.model.Template.TemplateType; import com.ewcms.publication.service.ArticlePublishServiceable; import com.ewcms.publication.service.ResourcePublishServiceable; import com.ewcms.publication.service.TemplatePublishServiceable; import com.ewcms.publication.service.TemplateSourcePublishServiceable; import com.ewcms.publication.task.TaskException; import com.ewcms.publication.task.Taskable; import com.ewcms.publication.task.impl.process.TaskProcessable; import freemarker.template.Configuration; /** * 发布模版生成的页面任务 * * @author wangwei */ public class TemplateTask implements Taskable{ public static class Builder{ private final Configuration cfg; private final TemplatePublishServiceable templateService; private final TemplateSourcePublishServiceable templateSourceService; private final ResourcePublishServiceable resourceService; private final ArticlePublishServiceable articleService; private final Site site; private final Channel channel; private final Template template; private String username = DEFAULT_USERNAME; private boolean again = false; private boolean dependence = true; public Builder(Configuration cfg, TemplateSourcePublishServiceable templateSourceService, ResourcePublishServiceable resourceService, ArticlePublishServiceable articleService, TemplatePublishServiceable templateService, Site site, Channel channel, Template template){ this.cfg = cfg; this.templateSourceService = templateSourceService; this.resourceService = resourceService; this.articleService = articleService; this.templateService = templateService; this.site = site; this.channel = channel; this.template = template; } public Builder setUsername(String username){ this.username = username; return this; } public Builder forceAgain(){ again = true; return this; } public Builder setAgain(boolean again){ this.again = again; return this; } public Builder setDependence(boolean dependence){ this.dependence = dependence; return this; } /** * 判断是否需要创建栏目首页 * * @return */ private boolean isCreateHome(){ List<Template> templates = templateService.getTemplatesInChannel(channel.getId()); boolean home = true; for(Template template : templates){ if(template.getType() == TemplateType.HOME){ home = false; break; } } return home; } private Taskable newHomeTask(){ return new HomeTask.Builder( cfg,templateSourceService,site,channel,template). setUsername(username). setDependence(dependence). build(); } private Taskable newListTask(){ return new ListTask.Builder( cfg,templateSourceService,articleService, site,channel,template). setUsername(username). setDependence(dependence). setCreateHome(isCreateHome()). build(); } private Taskable newDetailTask(){ return new DetailTask.Builder( cfg,templateSourceService,resourceService, articleService,site,channel,template). setUsername(username). setDependence(dependence). setAgain(again). build(); } private Taskable getTemplateTaskBy(TemplateType type,String patter) { Taskable task; if (template.getType() == null) return new NoneTask(); switch (template.getType()) { case HOME: task = newHomeTask(); break; case LIST: task = newListTask(); break; case DETAIL: task = newDetailTask(); break; default: task = new NoneTask(); } return task; } public TemplateTask build(){ Taskable task = getTemplateTaskBy( template.getType(),template.getUniquePath()); return new TemplateTask(task); } } private final Taskable task; public TemplateTask(Taskable task){ this.task = task; } @Override public String getId() { return task.getId(); } @Override public String getDescription() { return task.getDescription(); } @Override public String getUsername() { return task.getUsername(); } @Override public List<Taskable> getDependenceTasks() { return task.getDependenceTasks(); } @Override public List<TaskProcessable> toTaskProcess() throws TaskException { return task.toTaskProcess(); } @Override public int getProgress() { return task.getProgress(); } @Override public boolean isCompleted() { return task.isCompleted(); } }