/* ================================================================== * 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.timer; import java.util.ArrayList; 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.TimerStrategy; 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.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; public class TimerAction extends ProgressActionSupport { private static final long serialVersionUID = -8224472517614689746L; private TimerService timerService; private TimerCondition condition = new TimerCondition(); /** * 初始化定时策略树 */ public String initTacticIndex(){ List<?> allTimerStrategys = timerService.getAllTimerStrategy(); return print("TacticTree", new TreeEncoder(allTimerStrategys, new LevelTreeParser())); } /** * 新增时间策略 */ public String addTacticTime(){ TimerStrategy tacticIndex = timerService.addTimeStrategy(condition); return doAfterSave(true, tacticIndex, "TacticTree"); } /** * 新增索引/发布策略/文章过期策略 */ public String addTacticIndexAndPublish(){ TimerStrategy tacticIndex = timerService.addStrategy(condition); return doAfterSave(true, tacticIndex, "TacticTree"); } /** * 删除时间策略 */ public String removeTacticTime(){ timerService.removeTimeStrategy(condition.getTacticId()); return printSuccessMessage("删除成功!"); } /** * 删除 索引/发布 策略 */ public String removeTacticIndexAndPublish(){ timerService.removeStrategy(condition.getTacticId()); return printSuccessMessage("删除成功!"); } /** * 更新时间策略 */ public String updateTacticTime(){ timerService.updateTimeStrategy(condition); return printSuccessMessage("修改成功!"); } /** * 更新索引/发布策略/文章过期策略 */ public String updateTacticIndexAndPublish(){ timerService.updateTacticIndexAndPublish(condition); return printSuccessMessage("修改成功!"); } /** * 启用时间策略 */ public String startTacticTime(){ timerService.startTimeStrategy(condition.getTacticId()); return printSuccessMessage("启用成功!"); } /** * 启用索引/发布策略/文章过期策略 */ public String startTacticIndexAndPublish(){ timerService.startStrategy(condition.getTacticId()); return printSuccessMessage("启用成功!"); } /** * 停用时间策略 */ public String stopTacticTime(){ timerService.stopTimeStrategy(condition.getTacticId()); return printSuccessMessage("停用成功!"); } /** * 停用索引/发布策略/文章过期策略 */ public String stopTacticIndexAndPublish(){ timerService.stopStrategy(condition.getTacticId()); return printSuccessMessage("停用成功!"); } /** * 获取索引/发布策略/文章过期策略详细信息 */ public String getTacticIndexAndPublish() { Object[] data = timerService.getStrategyAndChannels(condition.getTacticId()); TimerStrategy _tacticIndex = (TimerStrategy) data[0]; List<?> channelList = (List<?>) data[1]; String templateUri; Integer strategyType = condition.getType(); if (CMSConstants.TACTIC_INDEX_TYPE.equals(strategyType)) { templateUri = CMSConstants.XFORM_TEMPLATE_TACTIC_INDEX; } else if (CMSConstants.TACTIC_PUBLISH_TYPE.equals(strategyType)) { templateUri = CMSConstants.XFORM_TEMPLATE_TACTIC_PUBLISH; } else if (CMSConstants.TACTIC_EXPIRE_TYPE.equals(strategyType)) { templateUri = CMSConstants.XFORM_TEMPLATE_EXPIRE_PUBLISH; } else { throw new BusinessException("策略类型值不正确。 condition.tacticId=" + strategyType); } _tacticIndex.setType(strategyType); XFormEncoder encoder = new XFormEncoder(templateUri, _tacticIndex); TreeEncoder channelTreeEncoder = new TreeEncoder(channelList, new LevelTreeParser()); String channelIds = _tacticIndex.getContent(); if ( !EasyUtils.isNullOrEmpty(channelIds) ) { final List<String> channelIdList = Arrays.asList(channelIds.split(",")); final List<Long> parentNodeIds = getParentNodes(channelList, channelIdList); channelTreeEncoder.setTranslator(new ITreeTranslator() { public Map<String, Object> translate(Map<String, Object> attributes) { // 父节点打半勾 if (parentNodeIds.contains(attributes.get("id"))) { attributes.put("checktype", "2"); } // 栏目节点被选中则打全勾 if (channelIdList.contains(attributes.get("id").toString())) { attributes.put("checktype", "1"); } return attributes; } }); } return print(new String[] { "IndexTacticInfo", "SequenceTree" }, new Object[] { encoder, channelTreeEncoder }); } private List<Long> getParentNodes(List<?> channelList, List<String> exsitIds) { List<Long> parentNodeIds = new ArrayList<Long>(); for ( Object temp : channelList ) { Channel channel = (Channel) temp; if (exsitIds.contains(channel.getId().toString())) { parentNodeIds.add(channel.getParentId()); } } return parentNodeIds; } /** * 获取时间策略详细信息 */ public String getTacticTime(){ TimerStrategy tacticTime = new TimerStrategy(); if (condition.getTacticId() != null) { tacticTime = timerService.getStrategyById(condition.getTacticId()); } XFormEncoder encoder = new XFormEncoder(CMSConstants.XFORM_TEMPLATE_TACTIC_TIME, tacticTime); return print("TimeTacticInfo", encoder); } /** * 即时执行策略 */ public String instantTactic(){ Long strategyId = condition.getTacticId(); TimerStrategy strategy = timerService.getStrategyById(strategyId); String channelIds = strategy.getContent(); if (null == channelIds) throw new BusinessException("您未选择栏目,请在栏目列表里选择需要的栏目."); Long parentId = strategy.getParentId(); TimerStrategy parent = timerService.getStrategyById(parentId); strategy.setIndexPath(parent.getIndexPath()); //取父节点的indexPath做为索引路径 strategy.setIncrement(CMSConstants.TRUE.equals(condition.getIncrement())); String code = timerService.excuteStrategy(strategy); return printScheduleMessage(code); } public TimerCondition getCondition() { return condition; } public void setTimerService(TimerService timerService) { this.timerService = timerService; } }