/**
* 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.content.resource.model.Resource;
import com.ewcms.core.site.model.Site;
import com.ewcms.publication.service.ResourcePublishServiceable;
import com.ewcms.publication.task.Taskable;
import com.ewcms.publication.task.impl.event.ResourceEvent;
import com.ewcms.publication.task.impl.process.ResourceProcess;
import com.ewcms.publication.task.impl.process.TaskProcessable;
/**
* 发布内容资源任务
*
* @author wangwei
*/
public class ResourceTask extends TaskBase{
private final static Logger logger = LoggerFactory.getLogger(ResourceTask.class);
public static class Builder extends BaseBuilder<Builder>{
private final ResourcePublishServiceable resourceService;
private int[] publishIds;
public Builder(ResourcePublishServiceable resourceService,Site site){
super(site);
this.resourceService = resourceService;
}
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<Resource> getResourceOfSite(){
return resourceService.findPublishResources(site.getId(),again);
}
/**
* 是否需要发布
*
* @param state 资源状态
* @return true 需要发布
*/
private boolean isPublish(Resource.Status state){
return (state == Resource.Status.NORMAL)
||(state==Resource.Status.RELEASED);
}
private List<Resource> getResourceOfPublishIds(){
List<Resource> resources = new ArrayList<Resource>();
for(Integer id : publishIds){
Resource resource = resourceService.getResource(id);
if(resource != null){
if(isPublish(resource.getStatus())){
resources.add(resource);
}
}else{
logger.warn("Resource is null,Id is {}.",id);
}
}
return resources;
}
/**
* 判断是否有引导图
*
* @param resource 资源对象
* @return true 有引导图
*/
private boolean isThumb(Resource resource){
return StringUtils.isNotBlank(resource.getThumbPath())
&& StringUtils.isNotBlank(resource.getThumbUri());
}
@Override
protected List<TaskProcessable> getTaskProcesses(){
List<Resource> resources = (hasPublishIds() ? getResourceOfPublishIds() : getResourceOfSite());
List<TaskProcessable> processes = new ArrayList<TaskProcessable>();
for(Resource resource : resources){
String[] paths;
String[] uris;
if(isThumb(resource)){
paths = new String[]{resource.getThumbPath(),resource.getPath()};
uris = new String[]{resource.getThumbUri(),resource.getUri()};
}else{
paths = new String[]{resource.getPath()};
uris = new String[]{resource.getUri()};
}
TaskProcessable process = new ResourceProcess(paths,uris);
process.registerEvent(new ResourceEvent(complete,resource,resourceService));
processes.add(process);
}
return processes;
}
}
public ResourceTask(String id,Builder builder){
super(id,builder);
}
protected boolean isAgain(){
return builder.again;
}
protected int[] getResourceIds(){
return ((Builder)builder).publishIds;
}
}