生成动态JSP

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;
  }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值