package edu.sjtu.infosec.ismp.manager.VPM.pm.comm; import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * create Ajax 解析对象 * @author LiuQing * */ public class HtmlFactory { /** * 编码转换 (解决中文乱码问题) * @param name */ public static String conversionCoding(String name) { return setConversionCoding(name,"UTF-8"); } public static String conversionCoding(String name,String charcode) { return setConversionCoding(name,charcode); } private static String setConversionCoding(String name,String charcode){ try { return new String(name.getBytes("iso-8859-1"),charcode); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; } /** * 判断是否为Null * @param obj * @return */ public static boolean isNotNull(Object obj) { return obj != null; } /** * 判断是否为空 * @param str * @return */ public static boolean isNotEmpty(String str) { if(isNotNull(str)) { return !"".equals(str); } return false; } public static Object reflectionObject(Object obj,String getMethodName) { try { Class<?> classType = obj.getClass(); Method getMethod = classType.getMethod(getMethodName, new Class[]{}); return getMethod.invoke(obj, new Object[]{}); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } return null; } /** * 把数据冲刷到页面 * @param response 请求相应 * @param sbf */ public static void flushData(HttpServletResponse response,StringBuffer sbf) { response.setContentType("text/xml;charset=utf-8"); PrintWriter out; try { sbf.insert(0,"<List>"); sbf.insert(sbf.length(),"</List>"); out = response.getWriter(); out.println(sbf.toString()); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 获取分页对象 * @return Page */ public static PMPage getPage(HttpServletRequest request) { PMPage page = new PMPage(); // 获得当前页 String curpage = request.getParameter("curpage") != null && (!request.getParameter("curpage").equals("")) ? request .getParameter("curpage") : "1"; // 设置当前页跟开始位置 page.setCurrentPage(Integer.parseInt(curpage)); //设置当前页跟开始位置 page.setBeginIndex((page.getCurrentPage() - 1) * page.getEveryPage()); return page; } private static void beginData(StringBuffer sbf,String bs) { sbf.append("<"+bs+">"); } private static void endData(StringBuffer sbf,String bs) { sbf.append("</"+bs+">"); } private static void getObjectDataArray(Map<Object,Map<String,String>> objMap,StringBuffer sbf,Map<String,Object[]> args) { for(Iterator<Map.Entry<Object, Map<String,String>>> iters =objMap.entrySet().iterator();iters.hasNext();){ Entry<Object, Map<String,String>> maps = iters.next(); for(Iterator<Map.Entry<String, String>> iter =maps.getValue().entrySet().iterator();iter.hasNext();){ Entry<String,String> map = iter.next(); Object ele =reflectionObject(maps.getKey(), map.getValue()); ele =comparisonKey(args,map,ele); sbf.append("<"+map.getValue()+">").append(ele == null ?"":ele).append("</"+map.getValue()+">"); } } } private static Object comparisonKey(Map<String,Object[]> map,Entry<String,String> key,Object value){ if(!(map == null) && !(value == null)){ for(Iterator<Map.Entry<String, Object[]>> iter= map.entrySet().iterator();iter.hasNext();){ Entry<String, Object[]> entry = iter.next(); if(entry.getKey().equals(key.getValue())){ if(entry.getValue().length == 1){ Object[][] obx = (Object[][]) entry.getValue()[0]; for(Object[] oa : obx){ if(oa[0].toString().equals(value.toString())){ key.setValue(key.getKey()); return oa[1]; } } }else if(entry.getValue().length == 2){ Object[][] obx = (Object[][]) entry.getValue()[1]; key.setValue((String) entry.getValue()[0]); for(Object[] oa : obx){ if(oa.length == 2 && oa[0].toString().equals(value.toString())){ return oa[1]; }else if(oa.length == 3 && entry.getValue()[0].equals(key.getKey())){ if(oa[0].toString().equals(value.toString())){ return oa[1]; }else{ return oa[2]; } } } } } } } key.setValue(key.getKey()); return value; } private static void getObjectDataArray(Object[] obj,StringBuffer sbf) { sbf.append("<"+obj[0]+">").append(obj[1] == null ?"":obj[1]).append("</"+obj[0]+">"); } private static void getObjectArray(Object[][] objs,Object obj,StringBuffer sbf,String bs) { Map<Object,Map<String,String>> maps = new HashMap<Object,Map<String,String>>(); Map<String,Object[]> mapValue=new HashMap<String,Object[]>(); Map<String,String> map = null; beginData(sbf,bs); if(!(obj == null)){ map=new HashMap<String,String>(); reflectionMap(obj,map,objs,mapValue); maps.put(obj, map); } if(!(objs == null)){ for(Object[] objstr: objs){ if(!(objstr[0] == null)){ if("String".equals(objstr[0].getClass().getSimpleName())){ if("ADD".equals(objstr[0].toString().toUpperCase())){ if("String[][]".equals(objstr[1].getClass().getSimpleName())){ Object[][] objts =(Object[][]) objstr[1]; for(Object[] oj : objts){ getObjectDataArray(oj,sbf); } }else{ objstr[0] = objstr[1]; objstr[1] = objstr[2]; getObjectDataArray(objstr,sbf); } } }else{ if(objstr.length > 1){ if(!(objstr[1] == null)){ Object[][] oele =(Object[][]) objstr[1]; map =new HashMap<String,String>(); for(Object[] objeles : oele){ if(objeles.length == 2){ if("String[][]".equals(objeles[1].getClass().getSimpleName())){ if(!(objeles[1] == null)){ Object[] o ={(String[][])objeles[1]}; mapValue.put(objeles[0].toString(),o); } } }else if(objeles.length ==3){ if("String[][]".equals(objeles[2].getClass().getSimpleName())){ if(!(objeles[2] == null)){ Object[] o ={objeles[0],objeles[2]}; mapValue.put(objeles[1].toString(),o); } } } map.put(objeles[0].toString(), objeles[1].toString()); } maps.put(objstr[0], map); } } } } } } getObjectDataArray(maps,sbf,mapValue); endData(sbf, bs); } private static void reflectionMap(Object obj,Map<String,String> map,Object[][] args,Map<String,Object[]> mapvalue){ Class<?> classType = obj.getClass(); Field fieldList[] = classType.getDeclaredFields(); try { for(Field field : fieldList) { String fieldName = field.getName(); String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getMethodName = "get" + firstLetter + fieldName.substring(1); map.put(fieldName, getMethodName); } }catch(Exception e) { e.printStackTrace(); } if(!(args == null)){ for(Object[] objts : args){ if(objts[0] == null){ map.remove(objts[1]); }else if(objts.length == 3){ Object[][] cObj = (Object[][]) objts[2]; if(cObj[0].length == 3){ map.put(objts[0].toString(), objts[1].toString()); } Object[] objx={objts[0],cObj}; mapvalue.put(objts[1].toString(), objx); } } } } public static void getDataArray(Object obj,StringBuffer sbf){ getObjectArray(null,obj,sbf,"SH"); } public static void getDataArray(Object obj,StringBuffer sbf,String bs){ getObjectArray(null,obj,sbf,bs); } public static void getDataArray(Object obj,StringBuffer sbf,Object[][] objs){ getObjectArray(objs,obj,sbf,"SH"); } public static void getDataArray(Object obj,StringBuffer sbf,String bs,Object[][] objs){ getObjectArray(objs,obj,sbf,bs); } public static void getDataArray(Object obj,StringBuffer sbf,Object[][] objs,String bs){ getObjectArray(objs,obj,sbf,bs); } public static void getDataArray(Object[][] objs,StringBuffer sbf,String bs) { getObjectArray(objs,null,sbf,bs); } public static void getDataArray(Object[][] objs,StringBuffer sbf) { getObjectArray(objs,null,sbf,"SH"); } }