ViewModel.java 11.9 KB
package com.taover.base.template.model.bussiness;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import com.taover.db.TableColumn;

public class ViewModel {
	private String webRootPath;
	private String controllerPathMap;
	//map结构如下
	//name:"",easyui:"numberbox|validatebox|datetimebox",required:true|false,precision:0,min:0,max:32767,validType
	private List<Map<String, String>> fields = new ArrayList<Map<String, String>>(); 
	
	private ViewModel(){}	
	public static ViewModel createViewModel(String controllerPathMap, String webRootPath,Vector<TableColumn> tableColumns){
		ViewModel model = new ViewModel();
		model.controllerPathMap = controllerPathMap;
		model.webRootPath = webRootPath;
		for(TableColumn column : tableColumns){
			String fieldName = column.getColumBeanLName();
			String fieldType = column.getJAVADataType();
			
			Map<String, String> columnMap = new HashMap<String, String>();
			columnMap.put("name", fieldName);
			if("Byte|Long|Integer|Short".indexOf(fieldType) != -1){
				columnMap.put("easyui", "numberbox");
				columnMap.put("attr", " precision=\"0\" ");
			}else if("Float|Double".indexOf(fieldType) != -1){
				columnMap.put("easyui", "numberbox");
				columnMap.put("attr", " precision=\"2\" ");
			}else if("java.util.Date|java.sql.Time|java.sql.Timestamp".indexOf(fieldType) != -1){			
				columnMap.put("easyui", "datetimebox");
				columnMap.put("attr", "");
			}else{
				columnMap.put("easyui", "validatebox");
				columnMap.put("attr", " validType=\"length[0,"+column.getColumnSize()+"]\"");
			}
			if(!column.isNullable()){
				columnMap.put("required", " required=\"true\" ");
			}
			String remarks = column.getRemarks();
			String splitStr = ":";
			if(remarks.contains(":")){
				splitStr = ":";
			}
			String remarkPart[] = remarks.split(splitStr);
			String cnName = fieldName;
			if(remarkPart.length > 0){
				cnName = remarkPart[0];
			}
			columnMap.put("cnName", cnName);
						
			String easyuiSearchDom = "";
			String layuiSearchDom = "";
			String layuiFormDom = "";
			if(remarkPart.length > 1){
				easyuiSearchDom = ViewModel.parseEasyuiSearchSelect(fieldName, cnName, remarkPart[1]);
				layuiSearchDom = ViewModel.parseLayuiSearchSelect(fieldName, cnName, remarkPart[1]);
				layuiFormDom = ViewModel.parseLayuiFormSelect(fieldName, cnName, remarkPart[1]);
			}else if("java.util.Date|java.sql.Time|java.sql.Timestamp".indexOf(fieldType) != -1){
				easyuiSearchDom = ViewModel.parseEasyuiSearchDatetime(fieldName, cnName);
				layuiSearchDom = ViewModel.parseLayuiSearchDatetime(fieldName, cnName);
				layuiFormDom = ViewModel.parseLayuiFormDatetime(fieldName, cnName);
			}else if("Byte|Long|Integer|Short".indexOf(fieldType) != -1){
				easyuiSearchDom = ViewModel.parseEasyuiSearchNumber(fieldName, cnName);
				layuiSearchDom = ViewModel.parseLayuiSearchNumber(fieldName, cnName);
				layuiFormDom = ViewModel.parseLayuiFormNumber(fieldName, cnName);
			}else{
				easyuiSearchDom = ViewModel.parseEasyuiSearchText(fieldName, cnName);
				layuiSearchDom = ViewModel.parseLayuiSearchText(fieldName, cnName);
				layuiFormDom = ViewModel.parseLayuiFormText(fieldName, cnName);
			}
			//构造easyui筛选栏元素
			columnMap.put("easyui-search-item", easyuiSearchDom);
			
			//构造layui筛选栏元素
			columnMap.put("layui-search-item", layuiSearchDom);
			
			//构造layui表单栏元素
			columnMap.put("layui-form-item", layuiFormDom);
			
			//构造layui表格表头
			columnMap.put("layui-table-item", ViewModel.parseLayuiTableHeader(fieldName, cnName));
			
			model.fields.add(columnMap);
		}
		return model;
	}
	
	public static String parseEasyuiSearchSelect(String name, String cnName, String optionStr){
		String easyuiSearchEle = "<div class=\"toolbar-form-item\">"
		        + "<span>"+cnName+"</span>"
		        + "<select name=\""+name+"\" class=\"easyui-combobox search_input\">"
		        	+ " <option value=\"\">全部</option> ";
		String[] options = optionStr.split(",");
		List<String> optionsList = new ArrayList<String>();
		for(int i=0; i<options.length; ++i){
			String tempOption = options[i];
			if(tempOption.contains(",")){
				String[] optionsExt = tempOption.split(",");
				if(optionsExt.length > 0){
					for(int j=0; j<optionsExt.length; ++j){
						optionsList.add(optionsExt[j]);
					}
				}
			}else{
				optionsList.add(options[i]);
			}
		}
		for(int i=0; i<optionsList.size(); ++i){
			String optionsItem = optionsList.get(i);
			String[] optionsArr = optionsItem.split("-");
			String optionName = "未知名称";
			if(optionsArr.length > 0){
				optionName = optionsArr[1];
			}
			easyuiSearchEle += " <option value=\""+optionsArr[0]+"\">"+optionName+"</option> ";
		}
		
		easyuiSearchEle += "</select></div>";
		return easyuiSearchEle;
	}
	
	public static String parseEasyuiSearchDatetime(String name, String cnName){
		String dateBoxDom = "<div class=\"toolbar-form-item\">"
	        + "<span>"+cnName+"</span>"
	        + "<input name=\""+name+"\" type=\"date\" class=\"easyui-datebox\" >"
        + "</div>";
		return dateBoxDom;
	}
	
	public static String parseEasyuiSearchNumber(String name, String cnName){
		String dateBoxDom = "<div class=\"toolbar-form-item\">"
	        + "<span>"+cnName+"</span>"
	        + "<input name=\""+name+"\" type=\"number\" class=\"easyui-numberbox\" >"
        + "</div>";
		return dateBoxDom;
	}
	
	public static String parseEasyuiSearchText(String name, String cnName){
		String dateBoxDom = "<div class=\"toolbar-form-item\">"
	        + "<span>"+cnName+"</span>"
	        + "<input name=\""+name+"\" type=\"text\" class=\"easyui-textbox\" >"
        + "</div>";
		return dateBoxDom;
	}
	
	/**
	 * <div class="layui-inline">
        <label class="layui-form-label">性别</label>
        <div class="layui-input-block">
          <select name="sex">
            <option value="0">不限</option>
            <option value="1" selected>男</option>
            <option value="2">女</option>
          </select>
        </div>
      </div>
	 * @param name
	 * @param cnName
	 * @param optionStr
	 * @return
	 */
	public static String parseLayuiSearchSelect(String name, String cnName, String optionStr){
		String LayuiSearchEle = "<div class=\"layui-inline\">"
		        + "<label class=\"layui-form-label\">"+cnName+"</label>"
		        + "<div class=\"layui-input-block\">"
		        	+ "<select name=\""+name+"\" class=\"layui-input\">"
		        		+ " <option value=\"\">全部</option>";
		String[] options = optionStr.split(",");
		List<String> optionsList = new ArrayList<String>();
		for(int i=0; i<options.length; ++i){
			String tempOption = options[i];
			if(tempOption.contains(",")){
				String[] optionsExt = tempOption.split(",");
				if(optionsExt.length > 0){
					for(int j=0; j<optionsExt.length; ++j){
						optionsList.add(optionsExt[j]);
					}
				}
			}else{
				optionsList.add(options[i]);
			}
		}
		for(int i=0; i<optionsList.size(); ++i){
			String optionsItem = optionsList.get(i);
			String[] optionsArr = optionsItem.split("-");
			String optionName = "未知名称";
			if(optionsArr.length > 0){
				optionName = optionsArr[1];
			}
			LayuiSearchEle += " <option value=\""+optionsArr[0]+"\">"+optionName+"</option> ";
		}
		
		LayuiSearchEle += "</select></div></div>";
		return LayuiSearchEle;
	}
	
	/**
	 * <div class="layui-inline">
		    <label class="layui-form-label">日期范围</label>
            <div class="layui-input-block">
              <input type="text" name="date" placeholder="请输入" class="layui-input me-date-range" >
            </div>
		  </div>
	 * @param name
	 * @param cnName
	 * @return
	 */
	public static String parseLayuiSearchDatetime(String name, String cnName){
		String dateBoxDom = "<div class=\"layui-inline\">"
	        + "<label class=\"layui-form-label\">"+cnName+"</label>"
	        + "<div class=\"layui-input-block\">"
	        	+"<input type=\"text\" name=\""+name+"\" placeholder=\"请输入\" class=\"layui-input me-date-range\" >" 
        + "</div></div>";
		return dateBoxDom;
	}
	
	public static String parseLayuiSearchNumber(String name, String cnName){
		String dateBoxDom = "<div class=\"layui-inline\">"
	        + "<label class=\"layui-form-label\">"+cnName+"</label>"
	        + "<div class=\"layui-input-block\">"
	        	+"<input type=\"number\" name=\""+name+"\" placeholder=\"请输入\" class=\"layui-input\" >" 
        + "</div></div>";
		return dateBoxDom;
	}
	
	public static String parseLayuiSearchText(String name, String cnName){
		String dateBoxDom = "<div class=\"layui-inline\">"
	        + "<label class=\"layui-form-label\">"+cnName+"</label>"
	        + "<div class=\"layui-input-block\">"
	        	+"<input type=\"text\" name=\""+name+"\" placeholder=\"请输入\" class=\"layui-input\" >" 
        + "</div></div>";
		return dateBoxDom;
	}
	
	public static String parseLayuiFormSelect(String name, String cnName, String optionStr){
		String LayuiFormEle = "<div class=\"layui-form-item\">"
		        + "<label class=\"layui-form-label\">"+cnName+"</label>"
		        + "<div class=\"layui-input-block\">"
		        	+ "<select name=\""+name+"\">"
		        		+ " <option value=\"\">全部</option>";
		String[] options = optionStr.split(",");
		List<String> optionsList = new ArrayList<String>();
		for(int i=0; i<options.length; ++i){
			String tempOption = options[i];
			if(tempOption.contains(",")){
				String[] optionsExt = tempOption.split(",");
				if(optionsExt.length > 0){
					for(int j=0; j<optionsExt.length; ++j){
						optionsList.add(optionsExt[j]);
					}
				}
			}else{
				optionsList.add(options[i]);
			}
		}
		for(int i=0; i<optionsList.size(); ++i){
			String optionsItem = optionsList.get(i);
			String[] optionsArr = optionsItem.split("-");
			String optionName = "未知名称";
			if(optionsArr.length > 0){
				optionName = optionsArr[1];
			}
			LayuiFormEle += " <option value=\""+optionsArr[0]+"\">"+optionName+"</option> ";
		}
		
		LayuiFormEle += "</select></div></div>";
		return LayuiFormEle;
	}
	
	/**
	 * <div class="layui-inline">
		    <label class="layui-form-label">日期范围</label>
            <div class="layui-input-block">
              <input type="text" name="date" placeholder="请输入" class="layui-input me-date-range" >
            </div>
		  </div>
	 * @param name
	 * @param cnName
	 * @return
	 */
	public static String parseLayuiFormDatetime(String name, String cnName){
		String dateBoxDom = "<div class=\"layui-form-item\">"
	        + "<label class=\"layui-form-label\">"+cnName+"</label>"
	        + "<div class=\"layui-input-block\">"
	        	+"<input type=\"text\" name=\""+name+"\" placeholder=\"请输入\" class=\"layui-input me-date-form\" >" 
        + "</div></div>";
		return dateBoxDom;
	}
	
	public static String parseLayuiFormNumber(String name, String cnName){
		String dateBoxDom = "<div class=\"layui-form-item\">"
	        + "<label class=\"layui-form-label\">"+cnName+"</label>"
	        + "<div class=\"layui-input-block\">"
	        	+"<input type=\"number\" name=\""+name+"\" class=\"layui-input\" >" 
        + "</div></div>";
		return dateBoxDom;
	}
	
	public static String parseLayuiFormText(String name, String cnName){
		String dateBoxDom = "<div class=\"layui-form-item\">"
	        + "<label class=\"layui-form-label\">"+cnName+"</label>"
	        + "<div class=\"layui-input-block\">"
	        	+"<input type=\"text\" name=\""+name+"\" placeholder=\"请输入\" class=\"layui-input\" >" 
        + "</div></div>";
		return dateBoxDom;
	}
	
	public static String parseLayuiTableHeader(String name, String cnName){
		String header = "{title:'"+cnName+"', field:'"+name+"', width:100, sort: true},";
		return header;
	}
	
	public String getControllerPathMap() {
		return controllerPathMap;
	}
	public void setControllerPathMap(String controllerPathMap) {
		this.controllerPathMap = controllerPathMap;
	}
	public List<Map<String, String>> getFields() {
		return fields;
	}
	public void setColumns(List<Map<String, String>> fields) {
		this.fields = fields;
	}
}