1 15 package com.openedit.modules.reflect; 16 17 import java.beans.IntrospectionException ; 18 import java.beans.Introspector ; 19 import java.beans.MethodDescriptor ; 20 import java.lang.reflect.InvocationTargetException ; 21 import java.lang.reflect.Method ; 22 import java.util.ArrayList ; 23 import java.util.Iterator ; 24 import java.util.List ; 25 import java.util.Set ; 26 27 import com.openedit.OpenEditException; 28 import com.openedit.WebPageRequest; 29 import com.openedit.modules.BaseModule; 30 31 37 public class Reflector extends BaseModule 38 { 39 public void reflectOnSessionObjects( WebPageRequest inContext ) throws OpenEditException 40 { 41 42 for (Iterator iter = inContext.getParameterMap().keySet().iterator(); iter.hasNext();) 43 { 44 String key = (String ) iter.next(); 45 int dotIndex = key.indexOf('.'); 46 if (dotIndex > 0) 47 { 48 String sessionObjectKey = key.substring(0, dotIndex); 49 Object sessionObject = inContext.getSessionValue(sessionObjectKey); 50 if (sessionObject == null) 51 { 52 return; 53 } 54 String methodName = key.substring(dotIndex + 1, key.length()); 55 List methods = findMethods(sessionObject, methodName); 56 for ( Iterator iterator = methods.iterator(); iterator.hasNext(); ) 57 { 58 Method method = (Method ) iterator.next(); 59 try 60 { 61 invokeMethod(inContext, method, sessionObject); 62 } 63 catch (Exception ex) 64 { 65 if ( ex instanceof OpenEditException) 67 { 68 throw (OpenEditException)ex; 69 } 70 throw new OpenEditException(ex); 71 } 72 } 73 } 74 } 75 76 } 77 78 84 public List findMethods(Object inObject, String inMethodName) 85 { 86 List methods = new ArrayList (); 87 MethodDescriptor [] methodDescriptors; 88 try 89 { 90 methodDescriptors = Introspector.getBeanInfo(inObject.getClass()).getMethodDescriptors(); 91 } 92 catch (IntrospectionException e) 93 { 94 return methods; 95 } 96 for (int i = 0; i < methodDescriptors.length; i++) 97 { 98 if ( methodDescriptors[i].getName().equals( inMethodName ) ) 99 { 100 methods.add( methodDescriptors[i].getMethod() ); 101 } 102 } 103 return methods; 104 } 105 106 protected void invokeMethod(WebPageRequest inContext, Method method, Object sessionObject) throws Exception 107 { 108 try 109 { 110 method.invoke(sessionObject, new Object [] { inContext }); 111 } 112 catch (InvocationTargetException ite) 113 { 114 Throwable throwable = ite.getTargetException(); 115 if (throwable instanceof Exception ) 116 { 117 throw (Exception ) throwable; 118 } 119 125 else if (throwable instanceof Error ) 126 { 127 throw (Error ) throwable; 128 } 129 else 130 { 131 throw new OpenEditException(throwable.getMessage()); 132 } 133 } 134 135 } 136 public void reflectOnRequestParameters(WebPageRequest inContext, Object inObject) throws Exception 137 { 138 Set keys = inContext.getParameterMap().keySet(); 139 for (Iterator iter = keys.iterator(); iter.hasNext();) 140 { 141 String key = (String ) iter.next(); 142 Object value; 143 List methods = findMethods( inObject, key ); 144 145 for ( Iterator iterator = methods.iterator(); iterator.hasNext(); ) 146 { 147 Method method = (Method ) iterator.next(); 148 149 Class [] parameterTypes = method.getParameterTypes(); 150 if ( parameterTypes.length == 1 ) 151 { 152 Class parameterType = parameterTypes[0]; 153 if ( parameterType.equals( String .class ) ) 154 { 155 value = inContext.getRequestParameter( key ); 156 } 157 else if ( parameterType.equals( String [].class ) ) 158 { 159 value = inContext.getRequestParameters( key ); 160 } 161 else if ( parameterType.equals( int.class ) ) 162 { 163 value = new Integer ( inContext.getRequestParameter( key ) ); 164 } 165 else if ( parameterType.equals( long.class ) ) 166 { 167 value = new Long ( inContext.getRequestParameter( key ) ); 168 } 169 else if ( parameterType.equals( double.class ) ) 170 { 171 value = new Double ( inContext.getRequestParameter( key ) ); 172 } 173 else if ( parameterType.equals( byte.class ) ) 174 { 175 value = new Byte ( inContext.getRequestParameter( key ) ); 176 } 177 else if ( parameterTypes.equals( boolean.class ) ) 178 { 179 value = new Boolean ( inContext.getRequestParameter( key ) ); 180 } 181 else 182 { 183 continue; 184 } 185 186 method.invoke( inObject, new Object [] { value } ); 187 } 188 } 189 } 190 } 191 192 } 193 | Popular Tags |