/** * 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.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.Assert; import com.ewcms.core.site.model.Site; import com.ewcms.core.site.model.TemplateSource; import com.ewcms.publication.service.TemplateSourcePublishServiceable; import com.ewcms.publication.task.TaskException; import com.ewcms.publication.task.Taskable; import com.ewcms.publication.task.impl.event.TemplateSourceEvent; import com.ewcms.publication.task.impl.process.TaskProcessable; import com.ewcms.publication.task.impl.process.TemplateSourceProcess; /** * 发布模版资源任务 * * @author wangwei */ public class TemplateSourceTask extends TaskBase { private final static Logger logger = LoggerFactory.getLogger(TemplateSourceTask.class); public static class Builder extends BaseBuilder<Builder>{ private final TemplateSourcePublishServiceable templateSourceService; private int[] publishIds; public Builder(TemplateSourcePublishServiceable templateSourceService,Site site){ super(site); Assert.notNull(templateSourceService,"Template source service is null"); this.templateSourceService = templateSourceService; } public Builder setPublishIds(int[] publishIds) { this.publishIds = publishIds; return this; } @Override protected String getDescription() { return String.format("%s模版资源发布",site.getSiteName()) ; } @Override protected List<Taskable> getDependenceTasks() { return new ArrayList<Taskable>(0); } private boolean hasPublishIds(){ return publishIds != null && publishIds.length > 0; } private List<TemplateSource> getTemplateSourceOfSite(){ return templateSourceService.findPublishTemplateSources(site.getId(), again); } /** * 判断是否是模版资源 * * @param source 模版资源对象 * @return true 模版资源 */ private boolean isTemplateSource(TemplateSource source){ return source.getSourceEntity() != null; } /** * 递归得到要发布的子模版资源 * * @param sources 发布的模版资源集合 * @param parent 父资源对象 */ private void getTemplateSourceChildren(List<TemplateSource> sources,TemplateSource parent){ if(isTemplateSource(parent)){ sources.add(parent); } List<TemplateSource> children = templateSourceService.getTemplateSourceChildren(parent.getId()); for(TemplateSource child : children){ getTemplateSourceChildren(sources,child); } } /** * 发布的模版资源集合 * * @return 模版资源集合 * @throws TaskException */ private List<TemplateSource> getTemplateSourceOfPublishIds(){ List<TemplateSource> sources = new ArrayList<TemplateSource>(); for(Integer id : publishIds){ TemplateSource source = templateSourceService.getTemplateSource(id); if(source != null){ getTemplateSourceChildren(sources,source); }else{ logger.warn("TemplateSource id = {} is not exist",id); } } return sources; } @Override protected List<TaskProcessable> getTaskProcesses() { List<TemplateSource> sources = hasPublishIds() ? getTemplateSourceOfPublishIds() : getTemplateSourceOfSite(); List<TaskProcessable> taskProcesses = new ArrayList<TaskProcessable>(); for(TemplateSource source : sources){ TemplateSourceProcess process = new TemplateSourceProcess(source.getPath(),source.getSourceEntity().getSrcEntity()); process.registerEvent(new TemplateSourceEvent(complete,source,templateSourceService)); taskProcesses.add(process); } return taskProcesses; } } public TemplateSourceTask(String id,Builder builder){ super(id,builder); } protected boolean isAgain(){ return builder.again; } protected int[] getPublishIds(){ return ((Builder)builder).publishIds; } }