/** * 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.publish; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.ewcms.core.site.model.SiteServer; import com.ewcms.publication.deploy.DeployOperatorable; import com.ewcms.publication.task.TaskException; import com.ewcms.publication.task.Taskable; import com.ewcms.publication.task.impl.process.TaskProcessable; /** * 实现单线程站点任务发布 * * @author wangwei */ public class SitePublish implements SitePublishable{ private static final Logger logger = LoggerFactory.getLogger(SitePublish.class); protected final DeployOperatorable operator; private volatile boolean cancelled = false; public SitePublish(SiteServer server) { this.operator = server.getOutputType().deployOperator(server); } /** * 执行发布任务 * * @param task 任务对象 * @throws TaskException */ protected void execute(Taskable task)throws TaskException{ List<TaskProcessable> processes = task.toTaskProcess(); for(TaskProcessable process: processes){ if(cancelled){ logger.info("Task was closed"); break; } Boolean success =process.execute(operator); logger.debug("publish success is {}",success); } } @Override public void publish(Taskable task) throws TaskException { cancelled = false; List<Taskable> dependences = task.getDependenceTasks(); for(Taskable dependence : dependences) { logger.debug("\"{}\" publish", task.getDescription()); publish(dependence); } if(!cancelled){ execute(task); } } @Override public void cancelPublish() { cancelled = true; } }