/* ==================================================================
* Created [2009-4-27 下午11:32:55] by Jon.King
* ==================================================================
* TSS
* ==================================================================
* mailTo:jinpujun@hotmail.com
* Copyright (c) Jon.King, 2009-2012
* ==================================================================
*/
package com.jinhe.tss.cms.action;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import com.jinhe.tss.cms.CMSConstants;
import com.jinhe.tss.cms.entity.Channel;
import com.jinhe.tss.cms.entity.WordsFilter;
import com.jinhe.tss.cms.entity.permission.ChannelPermissionsFull;
import com.jinhe.tss.cms.entity.permission.ChannelResourceView;
import com.jinhe.tss.cms.helper.translator.ChannelCanSelectTranslator;
import com.jinhe.tss.cms.service.IChannelService;
import com.jinhe.tss.cms.workflow.WorkFlow;
import com.jinhe.tss.cms.workflow.WorkFlowManager;
import com.jinhe.tss.component.dynproperty.support.IRemotePropertyService;
import com.jinhe.tss.component.support.web.webwork.ProgressActionSupport;
import com.jinhe.tss.core.exception.BusinessException;
import com.jinhe.tss.core.util.EasyUtils;
import com.jinhe.tss.core.util.XMLDocUtil;
import com.jinhe.tss.core.web.dispaly.tree.ITreeTranslator;
import com.jinhe.tss.core.web.dispaly.tree.LevelTreeParser;
import com.jinhe.tss.core.web.dispaly.tree.TreeEncoder;
import com.jinhe.tss.core.web.dispaly.xform.XFormEncoder;
import com.jinhe.tss.um.permission.PermissionHelper;
public class SiteAction extends ProgressActionSupport {
private static final long serialVersionUID = 5793599083683435652L;
private IChannelService channelService;
private IRemotePropertyService propertyService;
private Long siteId; //站点ID
private String action; //功能名
private Long channelId; //栏目ID
private Long resourceId; //资源id
private Integer isSite; //标记值 "1"-站点;"0"-栏目
private Long id;
private String shieldWords;
private String forbidWords;
private Channel channel = new Channel();
/**
* 获得站点和栏目树(包括所有的树节点过滤情况)
*/
public String getSiteAll() {
TreeEncoder treeEncoder = null;
if("distributeArticle".equals(action) || "reshipArticle".equals(action)
|| "moveArticle".equals(action) || "copyArticle".equals(action)){
Object[] object = channelService.selectCanAddArticleParentChannels();
treeEncoder = new TreeEncoder(object[0], new LevelTreeParser());
treeEncoder.setRootCanSelect(false);
treeEncoder.setTranslator(new ChannelCanSelectTranslator((String) object[1], channelId));
}
else if("moveChannel".equals(action) || ("copyChannel").equals(action)){
Object[] object = channelService.selectCanAddChannelParentChannels();
treeEncoder = new TreeEncoder(object[0], new LevelTreeParser());
treeEncoder.setRootCanSelect(false);
final List<Channel> selectedList = channelService.getChannelTreeDown(channelId);
final List<String> canAddChannelIds = Arrays.asList(((String) object[1]).split(",")) ;
// 树栏目是否可选 转换器 (专门为移动节点时的目标树结构用,移动节点的子节点都不可选)
treeEncoder.setTranslator(new ITreeTranslator() {
public Map<String, Object> translate(Map<String, Object> attributes) {
Object channelId = attributes.get("id");
for ( Channel channel : selectedList ) {
if (channelId.equals(channel.getId())) {
attributes.put("canselected", "0");
}
}
if( !canAddChannelIds.contains(String.valueOf(channelId)) ){
attributes.put("canselected", "0");
}
return attributes;
}
});
}else{
treeEncoder = new TreeEncoder(channelService.getAllSiteChannelList(), new LevelTreeParser());
}
return print("SiteTree",treeEncoder);
}
/**
* 新建站点
*/
public String saveSite(){
//新增的站点只有公有站点
channel.setIsSite(isSite);
channel.setParentId(CMSConstants.HEAD_NODE_ID);
Integer workflowId = channel.getWorkflowId();
WorkFlow flow = WorkFlowManager.getInstance().getWorkFlow(workflowId);
if(flow == null) {
throw new BusinessException("指定的文章工作流不存在。");
}
channel.setWorkflowName(flow.getName());
channelService.createSite(channel);
return doAfterSave(true, channel, "SiteTree");
}
/**
* 更新站点信息
*/
public String updateSite(){
channel.setIsSite(isSite);
channelService.updateSite(channel);
return printSuccessMessage("修改成功!");
}
/**
* 获得站点的详细信息
*/
public String getSiteDetail() {
if ( isCreateNew() ) {
channel = new Channel();
channel.setDocPath("docDir");
channel.setImagePath("imgDir");
}
else {
channel = channelService.getSiteById(siteId);
}
Map<String, String> map = propertyService.getXFormTemplate("site","baseXForm4Site");
Object siteXForm = map.get(CMSConstants.SITE_BASE_INFO_TAB_KEY);
if( siteXForm == null ){
throw new BusinessException("站点表单布局尚未设置,请转到动态属性进行设置.");
}
XFormEncoder xEncoder = new XFormEncoder(XMLDocUtil.dataXml2Doc((String) siteXForm), channel, false, false);
String[] objs = WorkFlowManager.getInstance().getWorkFlowCodeAndNames();
xEncoder.setColumnAttribute("workflowId", "editorvalue", objs[0]);
xEncoder.setColumnAttribute("workflowId", "editortext", objs[1]);
return print("SiteInfo", xEncoder);
}
/**
* 逻辑删除站点成功
*/
public String deleteSite(){
channelService.deleteChannel(siteId);
return printSuccessMessage("删除成功!");
}
/**
* 启用栏目
*/
public String startSite(){
channelService.startChannel(id);
return printSuccessMessage("启用成功!");
}
/**
* 启用站点下所有栏目
*/
public String startAll(){
channelService.startSiteAll(id);
return printSuccessMessage("启用成功!");
}
/**
* 停用站点
*/
public String stopSite(){
channelService.stopSite(id);
return printSuccessMessage("停用成功!");
}
/**
* 复制站点(站点和栏目分开传给前台进行处理)
*/
public String copySite(){
List<Channel> list = channelService.copyChannel(siteId, CMSConstants.HEAD_NODE_ID);
TreeEncoder treeEncoder = new TreeEncoder(list, new LevelTreeParser());
treeEncoder.setNeedRootNode(false);
return print("SiteTree", treeEncoder);
}
/**
* 根据资源id来获取操作权限
*/
public String getOperatorByResourceId(){
List<String> list = PermissionHelper.getInstance().getOperationsByResource(resourceId,
ChannelPermissionsFull.class.getName(), ChannelResourceView.class);
String permissionAll = "p1,p2," + EasyUtils.list2Str(list) + "cd1,cd2,cd3,cd4,cd5,ca1,ca2,ca3,ca4,ca5";
return print("Operation", permissionAll);
}
/**
* 初始化过滤信息XFrom
*/
public String initWordsFilterXForm(){
WordsFilter filter = channelService.getWordsFilterInfo(siteId);
if( filter == null ) {
filter = new WordsFilter();
}
XFormEncoder xEncoder = new XFormEncoder(CMSConstants.XFORM_TEMPLATE_WORDS_FILTER, filter);
return print("FilterInfo", xEncoder);
}
/**
* 保存词组过滤信息
*/
public String saveWordsFilterInfo(){
channelService.saveWordsFilter(shieldWords, forbidWords, siteId);
return printSuccessMessage("操作成功!");
}
public void setIsSite(Integer isSite) {
this.isSite = isSite;
}
public void setShieldWords(String shieldWords) {
this.shieldWords = shieldWords;
}
public void setForbidWords(String forbidWords) {
this.forbidWords = forbidWords;
}
public void setId(Long id) {
this.id = id;
}
public Channel getChannel() {
return channel;
}
public void setSiteId(Long siteId) {
this.siteId = siteId;
}
public void setResourceId(String resourceId) {
if("_rootId".equals(resourceId)){
this.resourceId = CMSConstants.HEAD_NODE_ID;
}else{
this.resourceId = new Long(resourceId);
}
}
public void setAction(String action) {
this.action = action;
}
public void setChannelId(Long channelId) {
this.channelId = channelId;
}
public void setPropertyService(IRemotePropertyService propertyService) {
this.propertyService = propertyService;
}
public void setChannelService(IChannelService channelService) {
this.channelService = channelService;
}
}