costin      01/03/03 19:37:16

  Modified:    src/share/org/apache/tomcat/util IntrospectionUtils.java
  Log:
  Added few more introspection tools.
  
  Revision  Changes    Path
  1.5       +106 -0    
jakarta-tomcat/src/share/org/apache/tomcat/util/IntrospectionUtils.java
  
  Index: IntrospectionUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/IntrospectionUtils.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- IntrospectionUtils.java   2001/01/20 21:44:39     1.4
  +++ IntrospectionUtils.java   2001/03/04 03:37:16     1.5
  @@ -191,4 +191,110 @@
        }
        return null;
       }
  +
  +
  +    /** Find a method with the right name
  +     If found, call the method ( if param is int or boolean we'll convert
  +     value to the right type before) - that means you can have setDebug(1).
  +    */
  +    public static void setProperty( Object o, String name, String value )
  +    {
  +     if( dbg > 1 ) d("setProperty(" +
  +                     o.getClass() + " " +  name + "="  +
  +                     value  +")" );
  +
  +     String setter= "set" +capitalize(name);
  +
  +     try {
  +         Method methods[]=o.getClass().getMethods();
  +         Method setPropertyMethod=null;
  +
  +         // First, the ideal case - a setFoo( String ) method
  +         for( int i=0; i< methods.length; i++ ) {
  +             Class paramT[]=methods[i].getParameterTypes();
  +             if( setter.equals( methods[i].getName() ) &&
  +                 paramT.length == 1 &&
  +                 "java.lang.String".equals( paramT[0].getName())) {
  +                 
  +                 methods[i].invoke( o, new Object[] { value } );
  +                 return;
  +             }
  +         }
  +         
  +         // Try a setFoo ( int ) or ( boolean )
  +         for( int i=0; i< methods.length; i++ ) {
  +             boolean ok=true;
  +             if( setter.equals( methods[i].getName() ) &&
  +                 methods[i].getParameterTypes().length == 1) {
  +
  +                 // match - find the type and invoke it
  +                 Class paramType=methods[i].getParameterTypes()[0];
  +                 Object params[]=new Object[1];
  +                 if ("java.lang.Integer".equals( paramType.getName()) ||
  +                     "int".equals( paramType.getName())) {
  +                     try {
  +                         params[0]=new Integer(value);
  +                     } catch( NumberFormatException ex ) {ok=false;}
  +                 } else if ("java.lang.Boolean".
  +                            equals( paramType.getName()) ||
  +                     "boolean".equals( paramType.getName())) {
  +                     params[0]=new Boolean(value);
  +                 } else {
  +                     d("Unknown type " + paramType.getName() );
  +                 }
  +
  +                 if( ok ) {
  +                     methods[i].invoke( o, params );
  +                     return;
  +                 }
  +             }
  +
  +             // save "setProperty" for later
  +             if( "setProperty".equals( methods[i].getName())) {
  +                 setPropertyMethod=methods[i];
  +             }
  +         }
  +
  +         // Ok, no setXXX found, try a setProperty("name", "value")
  +         if( setPropertyMethod != null ) {
  +             Object params[]=new Object[2];
  +             params[0]=name;
  +             params[1]=value;
  +             setPropertyMethod.invoke( o, params );
  +         }
  +
  +     } catch( SecurityException ex1 ) {
  +         if( dbg > 0 )
  +             d("SecurityException for " + o.getClass() + " " +
  +                     name + "="  + value  +")" );
  +         if( dbg > 1 ) ex1.printStackTrace();
  +     } catch (IllegalAccessException iae) {
  +         if( dbg > 0 )
  +             d("IllegalAccessException for " +
  +                     o.getClass() + " " +  name + "="  + value  +")" );
  +         if( dbg > 1 ) iae.printStackTrace();
  +     } catch (InvocationTargetException ie) {
  +         if( dbg > 0 )
  +             d("InvocationTargetException for " + o.getClass() +
  +                     " " +  name + "="  + value  +")" );
  +         if( dbg > 1 ) ie.printStackTrace();
  +     }
  +    }
  +
  +    /** Reverse of Introspector.decapitalize
  +     */
  +    public static String capitalize(String name) {
  +     if (name == null || name.length() == 0) {
  +         return name;
  +     }
  +     char chars[] = name.toCharArray();
  +     chars[0] = Character.toUpperCase(chars[0]);
  +     return new String(chars);
  +    }
  +
  +    // debug --------------------
  +    static final int dbg=0;
  +    static void d(String s ) {
  +     System.out.println("IntrospectionUtils: " + s );
  +    }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to