/** * 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 org.apache.commons.lang.StringUtils; 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.publication.freemarker.generator.ListGenerator; import com.ewcms.publication.generator.Generatorable; import com.ewcms.publication.service.ArticlePublishServiceable; import com.ewcms.publication.service.TemplateSourcePublishServiceable; import com.ewcms.publication.task.Taskable; import com.ewcms.publication.task.impl.event.CompleteEvent; import com.ewcms.publication.task.impl.process.GeneratorProcess; import com.ewcms.publication.task.impl.process.TaskProcessable; import com.ewcms.publication.uri.UriRuleable; import com.ewcms.publication.uri.UriRules; import freemarker.template.Configuration; /** * 发布List页面任务 * * @author wangwei */ public class ListTask extends TaskBase{ private static final Logger logger = LoggerFactory.getLogger(ListTask.class); public static class Builder extends BaseBuilder<Builder>{ private final Configuration cfg; private final TemplateSourcePublishServiceable templateSourceService; private final ArticlePublishServiceable articleService; private final Channel channel; private final Template template; private UriRuleable uriRule= UriRules.newList() ; private boolean createHome = false; public Builder(Configuration cfg, TemplateSourcePublishServiceable templateSourceService, ArticlePublishServiceable articleService, Site site,Channel channel,Template template){ super(site); this.cfg = cfg; this.templateSourceService = templateSourceService; this.articleService = articleService; this.channel = channel; this.template = template; if(StringUtils.isNotBlank(template.getUriPattern())){ uriRule =UriRules.newUriRuleBy(template.getUriPattern()); } } public Builder setCreateHome(boolean createHome){ this.createHome = createHome; return this; } @Override protected String getDescription() { return String.format("%s页面发布", template.getName()) ; } @Override protected List<Taskable> getDependenceTasks(){ List<Taskable> dependences = new ArrayList<Taskable>(); if(!dependence){ dependences.add( new TemplateSourceTask .Builder(templateSourceService, site) .setUsername(username) .build()); } return dependences; } /**TaskProcessable * 得到频道需要发布的页数 * * @param channelId 频道编号 * @param row 每页行数builder * @return 总页数 */ private int getPageCount(int channelId, int row){ Integer count = articleService.getArticleReleaseCount(channelId); logger.debug("Article count is {}",count); return (count + row -1)/row; } @Override protected List<TaskProcessable> getTaskProcesses() { int pageCount = getPageCount(channel.getId(),channel.getListSize()); logger.debug("Page count is {}",pageCount); List<TaskProcessable> processes = new ArrayList<TaskProcessable>(); for(int page = 0 ; page < pageCount ; page++){ Generatorable generator = new ListGenerator(cfg,site,channel,uriRule,page,pageCount,createHome); TaskProcessable process = new GeneratorProcess(generator, template.getUniquePath()); process.registerEvent(new CompleteEvent(complete)); processes.add(process); } return processes; } } public ListTask(String id,Builder builder){ super(id,builder); } }