package com.mtools.core.plugin.db; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Method; import java.util.List; public class BeanTools { public static boolean hasBit(int flag,int bit) { return (flag&bit)==bit; } public static Object readProp(Object o,Method m) { try { return m.invoke(o); } catch (Exception e) { return null; } } public static PropertyDescriptor findPD(PropertyDescriptor[]pda,String name) { int i; for(i=0;i<pda.length;++i) { PropertyDescriptor pd=pda[i]; if(pd.getName().equals(name)) return pd; } return null; } @SuppressWarnings("unchecked") public static PropertyDescriptor[] getPDs(Class clz) { BeanInfo bi=null; try { bi=Introspector.getBeanInfo(clz); } catch(Exception e) { return new PropertyDescriptor[0]; } PropertyDescriptor[] descriptors; descriptors=bi.getPropertyDescriptors(); if(descriptors==null) return new PropertyDescriptor[0]; return descriptors; } @SuppressWarnings("unchecked") public static boolean isDigit(Class clz) { if(clz.isAssignableFrom(Character.class)) return true; else if(clz.isAssignableFrom(Byte.class)) return true; else if(clz.isAssignableFrom(Short.class)) return true; else if(clz.isAssignableFrom(Integer.class)) return true; else if(clz.isAssignableFrom(Long.class)) return true; else if(clz.isAssignableFrom(Float.class)) return true; else if(clz.isAssignableFrom(Double.class)) return true; return false; } @SuppressWarnings("unchecked") public static Object toObj(Class clz,long val) { if(clz.isAssignableFrom(Character.class)) return new Character((char)val); else if(clz.isAssignableFrom(Byte.class)) return new Byte((byte)val); else if(clz.isAssignableFrom(Short.class)) return new Short((short)val); else if(clz.isAssignableFrom(Integer.class)) return new Integer((int)val); else if(clz.isAssignableFrom(Long.class)) return new Long(val); else if(clz.isAssignableFrom(Float.class)) return new Float(val); else if(clz.isAssignableFrom(Double.class)) return new Double(val); return null; } @SuppressWarnings("unchecked") public static Object getMin(Class clz) { if(clz.isAssignableFrom(Character.class)) return new Character(Character.MIN_VALUE); else if(clz.isAssignableFrom(Byte.class)) return new Byte(Byte.MIN_VALUE); else if(clz.isAssignableFrom(Short.class)) return new Short(Short.MIN_VALUE); else if(clz.isAssignableFrom(Integer.class)) return new Integer(Integer.MIN_VALUE); else if(clz.isAssignableFrom(Long.class)) return new Long(Long.MIN_VALUE); else if(clz.isAssignableFrom(Float.class)) return new Float(Float.MIN_VALUE); else if(clz.isAssignableFrom(Double.class)) return new Double(Double.MIN_VALUE); //else if(clz.isAssignableFrom(Boolean.class)) return Boolean. return null; } public static void iteratPorp(Object bean,BeanPropHandler propHandler) { PropertyDescriptor pda[]=BeanTools.getPDs(bean.getClass()); for(PropertyDescriptor pd:pda) { if(pd.getName().equals("class")) continue; Object val=BeanTools.readProp(bean,pd.getReadMethod()); propHandler.handle(bean, pd.getName(), val); } } public static boolean ignore(Object o) { if(o==null) return true; if(o.equals(getMin(o.getClass()))) return true; return false; } @SuppressWarnings("unchecked") public void initObj(Object o) { int i; PropertyDescriptor[] pds=BeanTools.getPDs(o.getClass()); PropertyDescriptor pd; for(i=0;i<pds.length;++i) { pd=pds[i]; Method wm=pd.getWriteMethod(); if(wm==null) continue; try { Class clz=pd.getPropertyType(); Object val[]=new Object[1]; if(clz.isAssignableFrom(Boolean.class)) val[0]=new Boolean(false); else val[0]=getMin(clz); wm.invoke(o, val); } catch(Exception e) { e.printStackTrace(); continue; } } } }