costin      2002/06/05 17:58:45

  Modified:    util/java/org/apache/tomcat/util IntrospectionUtils.java
  Log:
  Few additions to the introspector to manage gets.
  
  Also a bit of cleanup in replaceProperties - explicitely set the Hashtable
  and the source for dynamic properties.
  
  Revision  Changes    Path
  1.5       +99 -6     
jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/IntrospectionUtils.java
  
  Index: IntrospectionUtils.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/IntrospectionUtils.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- IntrospectionUtils.java   17 May 2002 02:32:12 -0000      1.4
  +++ IntrospectionUtils.java   6 Jun 2002 00:58:45 -0000       1.5
  @@ -114,6 +114,26 @@
        return; 
       }
   
  +
  +    /** 
  +     *  Call void getAttribute( String )
  +     */
  +    public static Object getAttribute( Object proxy, String n)
  +     throws Exception
  +    {
  +     Method executeM=null;
  +     Class c=proxy.getClass();
  +     Class params[]=new Class[1];
  +     params[0]= String.class;
  +     executeM=findMethod( c, "getAttribute", params );
  +     if( executeM == null ) {
  +         System.out.println("No getAttribute in " + proxy.getClass() );
  +         return null;
  +     }
  +     return executeM.invoke(proxy, new Object[] { n });
  +    }
  +
  +
       /** Construct a URLClassLoader. Will compile and work in JDK1.1 too.
        */
       public static ClassLoader getURLClassLoader( URL urls[],
  @@ -372,6 +392,58 @@
        }
       }
   
  +    public static Object getProperty( Object o, String name ) {
  +     String getter= "get" +capitalize(name);
  +
  +     try {
  +         Method methods[]=findMethods( o.getClass() );
  +         Method getPropertyMethod=null;
  +
  +         // First, the ideal case - a getFoo() method
  +         for( int i=0; i< methods.length; i++ ) {
  +             Class paramT[]=methods[i].getParameterTypes();
  +             if( getter.equals( methods[i].getName() ) &&
  +                 paramT.length == 0 ) {
  +                 return methods[i].invoke( o, null );
  +             }
  +         
  +             if( "getProperty".equals( methods[i].getName())) {
  +                 getPropertyMethod=methods[i];
  +             }
  +             if( "getAttribute".equals( methods[i].getName())) {
  +                 getPropertyMethod=methods[i];
  +             }
  +         }
  +
  +         // Ok, no setXXX found, try a getProperty("name")
  +         if( getPropertyMethod != null ) {
  +             Object params[]=new Object[1];
  +             params[0]=name;
  +             getPropertyMethod.invoke( o, params );
  +         }
  +
  +     } catch( IllegalArgumentException ex2 ) {
  +            System.err.println("IAE " + o + " " + name );
  +            ex2.printStackTrace();
  +     } catch( SecurityException ex1 ) {
  +         if( dbg > 0 )
  +             d("SecurityException for " + o.getClass() + " " +
  +                     name + ")" );
  +         if( dbg > 1 ) ex1.printStackTrace();
  +     } catch (IllegalAccessException iae) {
  +         if( dbg > 0 )
  +             d("IllegalAccessException for " +
  +                     o.getClass() + " " +  name  +")" );
  +         if( dbg > 1 ) iae.printStackTrace();
  +     } catch (InvocationTargetException ie) {
  +         if( dbg > 0 )
  +             d("InvocationTargetException for " + o.getClass() +
  +                     " " +  name   +")" );
  +         if( dbg > 1 ) ie.printStackTrace();
  +     }
  +        return null;
  +    }
  +
       /** 
        */
       public static void setProperty( Object o, String name ) {
  @@ -396,12 +468,27 @@
       }
       
       /** Replace ${NAME} with the property value
  +     *  @deprecated. Use the explicit method
        */
       public static String replaceProperties(String value,
                                           Object getter )
       {
  +        if( getter instanceof Hashtable )
  +            return replaceProperties( value, (Hashtable)getter, null );
  +
  +        if( getter instanceof PropertySource ) {
  +            PropertySource src[]=new PropertySource[] {(PropertySource)getter};
  +            return replaceProperties( value, null,  src);
  +        }
  +        return value;
  +    }
  +
  +    /** Replace ${NAME} with the property value
  +     */
  +    public static String replaceProperties(String value,
  +                                        Hashtable staticProp, PropertySource 
dynamicProp[] )
  +    {
           StringBuffer sb=new StringBuffer();
  -        int i=0;
           int prev=0;
           // assert value!=nil
           int pos;
  @@ -425,10 +512,16 @@
                   }
                   String n=value.substring( pos+2, endName );
                String v= null;
  -             if( getter instanceof Hashtable ) {
  -                 v=(String)((Hashtable)getter).get(n);
  -             } else if ( getter instanceof PropertySource ) {
  -                 v=((PropertySource)getter).getProperty( n );
  +             if( staticProp != null ) {
  +                 v=(String)((Hashtable)staticProp).get(n);
  +             }
  +                if( v==null && dynamicProp != null) {
  +                    for( int i=0; i<dynamicProp.length; i++ ) {
  +                        v=dynamicProp[i].getProperty( n );
  +                        if( v!=null ) {
  +                            break;
  +                        }
  +                    }
                }
                if( v== null )
                    v = "${"+n+"}"; 
  @@ -889,7 +982,7 @@
        
       }
   
  -    
  +
       // debug --------------------
       static final int dbg=0;
       static void d(String s ) {
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to