package com.trendcom.portal.bean;
import genCode.generator.JspGenerator;
import genCode.generator.impl.JspGeneratorImpl;
import genCode.model.JspModel;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.servlet.ServletContext;
import org.apache.commons.lang.StringUtils;
import org.apache.struts2.ServletActionContext;
import com.trendcom.model.Msystemsubtype;
import com.trendcom.portal.model.UI_Block;
import com.trendcom.portal.model.UI_BlockType;
import com.trendcom.portal.model.UI_Template;
import com.trendcom.portal.service.UI_TemplateService;
import com.trendcom.portal.util.UITemplate;
import com.trendcom.portal.util.UITemplateServiceUtils;
import com.trendcom.portal.util.UITemplateUtils;
import com.trendcom.service.MsystemsubtypeService;
import com.trendcom.util.SpringBeanUtil;
import com.trendcom.util.StringUtil;
public class UITemplatePartBean {
UITemplateServiceUtils templateServiceUtils=new UITemplateServiceUtils();
public final static String DEFAULT_KEYNAME="pos";
public final static String DEFAULT_KEYVALUE="right";
public final static String MARK_REPLACECODE="[{replaceCode}]";
public final static String MARK_INCLUDE_HTMLSTART="HTMLSTART";
public final static String MARK_INCLUDE_HTMLEND="HTMLEND";
public void process(Hashtable map) throws Exception {
// 取得所有 有 keyName 的值分类保存
Map<String,List<UI_Block>> groupBlockMap=new LinkedHashMap<String, List<UI_Block>>();
ServletContext sc = (ServletContext)map.get("BaseServletContext");
String SYSTEM_SUB_ID=StringUtil.toString(map.get("SYSTEM_SUB_ID"));
ServletActionContext _actionContext=(ServletActionContext) map.get("_actionContext");
if (_actionContext!=null) {
map.put(UITemplate.KEY_SESSION,_actionContext.getSession());
map.put(UITemplate.KEY_REQUEST,_actionContext.getRequest());
}
map.put(UITemplate.KEY_SYSTEMTYPE,map.get("SystemId"));
Long templateId=StringUtil.toLong(map.get("TemplateId"));
String rootPath=sc.getRealPath("/");
if(templateId == null){
System.out.println(" templateId 为空");
return ;
}
UI_TemplateService templateService=(UI_TemplateService)SpringBeanUtil.getBean("UI_TemplateServiceImpl");
UI_Template _template=(UI_Template)templateService.findById(templateId.intValue());
Integer systemSubid = _template.getSystemSubid();
if(systemSubid!=null){ //读取模板中的子系统ID。如果不为空,则使用该子系统ID
SYSTEM_SUB_ID = systemSubid.toString();
}
UITemplate ui = new UITemplate(map);
UI_Template template = ui.getTemplateByName(_template.getTemplatename());
String params=template.getParameter();
Map map2=UITemplateUtils.urlParamToMap(params, map);
String keyName=null;
// String keyValue=null;
if(map2 != null){
keyName=StringUtil.toString(map2.get("$keyName"));
// keyValue=StringUtil.toString(map2.get("$keyValue"));
if(StringUtils.isBlank(keyName)){
keyName=DEFAULT_KEYNAME;
}
// if(StringUtils.isBlank(keyValue)){
// keyValue=DEFAULT_KEYVALUE;
// }
}
// 参数
Map<String,List<UI_Block>> groupBlockHanderMap=getAllHandlerBlock(template,map,keyName,groupBlockMap);
// 路径
MsystemsubtypeService msystemsubtypeService=(MsystemsubtypeService)SpringBeanUtil.getBean("msystemsubtypeServiceImpl");
Msystemsubtype msystemsubtype=(Msystemsubtype)msystemsubtypeService.findById(StringUtil.toLong(SYSTEM_SUB_ID));
String name=msystemsubtype.getSubsystemname();
if(groupBlockHanderMap != null && !groupBlockHanderMap.isEmpty()){
for(Map.Entry<String,List<UI_Block>> entry:groupBlockHanderMap.entrySet()){
String fileName=entry.getKey();
List<UI_Block> handlerBlockList=entry.getValue();
String jspPath=rootPath+name+"/webs/"+template.getTemplatename()+"/"+template.getTemplatename()+"_"+fileName+".jsp";
//System.out.println("[UITemplatePartBean] +++++++++++++++++++++++++++ jspPath=" + jspPath);
String fltPath=rootPath+"flt/emplty.ftl";
Map<String,Object> dataMap=getAllhandlerformat(handlerBlockList);
dataMap.put("basePath","${basePath}");
dataMap.put("systemSubType","${systemSubType}");
dataMap.put("$_CssPath","${$_CssPath}");
dataMap.put("$_JspPath","${$_JspPath}");
dataMap.put("$_JsPath","${$_JsPath}");
// dataMap.put("replaceCode",""); // 默认不替换
JspGenerator jspGenerator=new JspGeneratorImpl(); //注意了:主要代码撒
JspModel jspModel=new JspModel();
jspModel.setFltPath(fltPath);
jspModel.setJspPath(jspPath);
jspGenerator.getAllJsp(jspModel, dataMap,true);
}
}
}
private Map<String,Object> getAllhandlerformat(List<UI_Block> handlerBlockList){
Map<String,Object> map=new HashMap<String,Object>();
map.put("blockList", handlerBlockList);
return map;
}
// 取得 模板的 所有block
private Map<String,List<UI_Block>> getAllHandlerBlock(UI_Template template,Map map,String keyName,Map<String,List<UI_Block>> groupBlockMap){
Map<Object,Object> blockMap=template.getBlockMap();
for(Map.Entry<Object,Object> entry:blockMap.entrySet()){
Object key=entry.getKey();
UI_Block block=(UI_Block)entry.getValue();
// add block
boolean isKeyName=putBlock(block, map, keyName, groupBlockMap);
downSearch(block,map,keyName,groupBlockMap);
}
return groupBlockMap;
}
private void downSearch(UI_Block block,Map map,String keyName,Map<String,List<UI_Block>> groupBlockMap){
Map childMap=block.getBlockMap(); // 取得子 block
if(childMap != null && !childMap.isEmpty()){
for(Object obj:childMap.values()){
if(obj != null){
UI_Block childBlock=(UI_Block)obj;
boolean isKeyName=putBlock(childBlock, map, keyName, groupBlockMap);
downSearch(childBlock,map,keyName,groupBlockMap);
}
}
}
}
private boolean putBlock(UI_Block block,Map map,String keyName,Map<String,List<UI_Block>> groupBlockMap){
if(block != null){
String params=block.getParameter();
if(StringUtils.isNotBlank(params)){
Map map2=UITemplateUtils.urlParamToMap(params, map);
// System.out.println("block: "+block.getBlockname()+" params:"+map2);
if(map2 != null){
String keyValue=StringUtil.toString(map2.get(keyName));
if(StringUtils.isNotBlank(keyValue)){ // keyName 值不为空
UI_BlockType blockType=block.getBlockType();
if(blockType != null && blockType != null){
String htmlCode=blockType.getHtmlcode();
if(StringUtils.isNotBlank(htmlCode)){
Map varMap=getVarInfo(htmlCode);
htmlCode=replaceChildCode(block, htmlCode,varMap);
map.putAll(map2);
templateServiceUtils.setReplacetKey(block, map);
String newHtmlCode=templateServiceUtils.replaceHtml(htmlCode, map);
block.setHtmlCode(newHtmlCode);
}
}
List<UI_Block> list=groupBlockMap.get(keyValue);
if(list == null){
list=new LinkedList<UI_Block>();
}
list.add(block);
groupBlockMap.put(keyValue, list);
return true;
}
}
}
}
return false;
}
private String replaceChildCode(UI_Block block,String htmlCode,Map<String,String> varMap){
String beginCode="";
String endCode="";
if(varMap != null){
beginCode=varMap.get(MARK_INCLUDE_HTMLSTART);
endCode=varMap.get(MARK_INCLUDE_HTMLEND);
}
String hander=block.getHandler();
StringBuffer childerHtmlCode=new StringBuffer();
if(StringUtils.isBlank(hander) && StringUtils.isNotBlank(htmlCode)){
if(StringUtils.contains(htmlCode,MARK_REPLACECODE)){
Set<UI_Block> childBlockSet=block.getChildBlocks();
if(childBlockSet != null){
for(UI_Block cBlock:childBlockSet){
UI_BlockType blockType=cBlock.getBlockType();
if(blockType != null && blockType != null){
String cHtmlCode=blockType.getHtmlcode();
if(StringUtils.isNotBlank(cHtmlCode)){
Map cMap=new HashMap();
templateServiceUtils.setReplacetKey(cBlock,cMap);
String newHtmlCode=templateServiceUtils.replaceHtml(cHtmlCode, cMap);
childerHtmlCode.append(beginCode);
childerHtmlCode.append(newHtmlCode);
childerHtmlCode.append(endCode);
}
}
}
htmlCode=StringUtils.replace(htmlCode, MARK_REPLACECODE,childerHtmlCode.toString());
}
}
}
return htmlCode;
}
private Map<String,String> getVarInfo(String htmlCode){
Map<String,String> varMap=new HashMap<String, String>();
String keys[]=StringUtils.substringsBetween(htmlCode,"[$", "$]");
if(keys != null){
for(String key:keys){
String var=StringUtils.substringBefore(key,"=");
String value=StringUtils.substringAfter(key,"=");
if(StringUtils.isNotBlank(value)){
varMap.put(var.trim().toUpperCase(), value);
}
}
}
return varMap;
}
private boolean isAdd(UI_Block block,Map map,String keyName){
if(block != null){
String params=block.getParameter();
String htmlCode=block.getHtmlCode();
if(StringUtils.isNotBlank(params)){
Map map2=UITemplateUtils.urlParamToMap(params, map);
if(map2 != null){
String value=StringUtil.toString(map2.get(keyName));
if(StringUtils.isNotBlank(value)){ // keyName 值不为空
if(StringUtils.isNotBlank(htmlCode)){
templateServiceUtils.setReplacetKey(block, map);
String newHtmlCode=templateServiceUtils.replaceHtml(htmlCode, map);
block.setHtmlCode(newHtmlCode);
}
return true;
}
}
}
}
return false;
}
}