costin      2003/01/05 21:55:44

  Modified:    modeler/src/java/org/apache/commons/modeler Registry.java
  Log:
  A bit of refactoring of Registry. The metadata source is abstracted -
  this will eventually allow us to cache the .ser and other tricks.
  
  The introspection code ( merged from DynamicMBean ) moves to a separate
  metadata source.
  
  Revision  Changes    Path
  1.12      +19 -170   
jakarta-commons/modeler/src/java/org/apache/commons/modeler/Registry.java
  
  Index: Registry.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-commons/modeler/src/java/org/apache/commons/modeler/Registry.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Registry.java     29 Dec 2002 18:01:42 -0000      1.11
  +++ Registry.java     6 Jan 2003 05:55:44 -0000       1.12
  @@ -262,7 +262,7 @@
        */
       public static void loadRegistry(InputStream stream) throws Exception {
           Registry registry = getRegistry();
  -        registry.loadDescriptors( stream, "modeler" );
  +        registry.loadDescriptors( stream, "MbeansDescriptorsDOM" );
       }
   
   
  @@ -272,14 +272,14 @@
       public static class DescriptorSource {
   
           public void loadDescriptors( Registry registry, String location,
  -                                     String type, InputStream stream)
  +                                     String type, Object source)
               throws Exception
           {
               // TODO
           }
       }
   
  -    public void loadDescriptors( String location, String type, InputStream stream )
  +    private DescriptorSource getDescriptorSource( String type )
           throws Exception
       {
           if( type==null ) type="MbeansDescriptorsDOM";
  @@ -289,6 +289,13 @@
   
           Class c=Class.forName( sourceClassName );
           DescriptorSource ds=(DescriptorSource)c.newInstance();
  +        return ds;
  +    }
  +
  +    public void loadDescriptors( String location, String type, InputStream stream )
  +        throws Exception
  +    {
  +        DescriptorSource ds=getDescriptorSource(type);
           ds.loadDescriptors(this, location, type, stream);
       }
   
  @@ -413,88 +420,6 @@
           }
       }
   
  -    // ------------ Implementation for non-declared introspection classes
  -
  -
  -    // createMBean == registerClass + registerMBean
  -
  -    private boolean supportedType( Class ret ) {
  -        return ret == String.class ||
  -            ret == Integer.class ||
  -            ret == Integer.TYPE ||
  -            ret == Long.class ||
  -            ret == Long.TYPE ||
  -            ret == java.io.File.class ||
  -            ret == Boolean.class ||
  -            ret == Boolean.TYPE
  -            ;
  -    }
  -
  -    /** Process the methods and extract 'attributes', methods, etc
  -      *
  -      */
  -    private void initMethods(Class realClass,
  -                             Method methods[],
  -                             Hashtable attMap, Hashtable getAttMap,
  -                             Hashtable setAttMap, Hashtable invokeAttMap)
  -    {
  -        for (int j = 0; j < methods.length; ++j) {
  -            String name=methods[j].getName();
  -
  -            if( name.startsWith( "get" ) ) {
  -                Class params[]=methods[j].getParameterTypes();
  -                if( params.length != 0 ) {
  -                    if( log.isDebugEnabled())
  -                        log.debug("Wrong param count " + name + " " + 
params.length);
  -                    continue;
  -                }
  -                if( ! Modifier.isPublic( methods[j].getModifiers() ) ) {
  -                    if( log.isDebugEnabled())
  -                        log.debug("Not public " + methods[j] );
  -                    continue;
  -                }
  -                Class ret=methods[j].getReturnType();
  -                if( ! supportedType( ret ) ) {
  -                    if( log.isDebugEnabled() )
  -                        log.debug("Unsupported type " + methods[j] + " " + ret );
  -                    continue;
  -                }
  -                name=unCapitalize( name.substring(3));
  -
  -                getAttMap.put( name, methods[j] );
  -                // just a marker, we don't use the value
  -                attMap.put( name, methods[j] );
  -            } else if( name.startsWith( "is" ) ) {
  -                // not used in our code. Add later
  -
  -            } else if( name.startsWith( "set" ) ) {
  -                Class params[]=methods[j].getParameterTypes();
  -                if( params.length != 1 ) {
  -                    if( log.isDebugEnabled())
  -                        log.debug("Wrong param count " + name + " " + 
params.length);
  -                    continue;
  -                }
  -                if( ! Modifier.isPublic( methods[j].getModifiers() ) ) {
  -                    if( log.isDebugEnabled())
  -                        log.debug("Not public " + name);
  -                    continue;
  -                }
  -                name=unCapitalize( name.substring(3));
  -                setAttMap.put( name, methods[j] );
  -                attMap.put( name, methods[j] );
  -            } else {
  -                if( methods[j].getParameterTypes().length != 0 ) {
  -                    continue;
  -                }
  -                if( methods[j].getDeclaringClass() == Object.class )
  -                    continue;
  -                if( ! Modifier.isPublic( methods[j].getModifiers() ) )
  -                    continue;
  -                invokeAttMap.put( name, methods[j]);
  -            }
  -        }
  -    }
  -
       /**
        * @todo Find if the 'className' is the name of the MBean or
        *       the real class ( I suppose first )
  @@ -503,95 +428,19 @@
        * @todo Deal with constructors
        *
        */
  -    public ManagedBean createManagedBean(String domain, Class realClass, String 
type) {
  -        ManagedBean mbean= new ManagedBean();
  -
  -        Method methods[]=null;
  -
  -        Hashtable attMap=new Hashtable();
  -        // key: attribute val: getter method
  -        Hashtable getAttMap=new Hashtable();
  -        // key: attribute val: setter method
  -        Hashtable setAttMap=new Hashtable();
  -        // key: operation val: invoke method
  -        Hashtable invokeAttMap=new Hashtable();
  -
  -        methods = realClass.getMethods();
  -
  -        initMethods(realClass, methods, attMap, getAttMap, setAttMap, invokeAttMap 
);
  -
  -        if( type==null) type=super.generateSeqName(domain, realClass);
  -
  +    public ManagedBean createManagedBean(String domain, Class realClass,
  +                                         String type)
  +    {
           try {
  -
  -            Enumeration en=attMap.keys();
  -            while( en.hasMoreElements() ) {
  -                String name=(String)en.nextElement();
  -                AttributeInfo ai=new AttributeInfo();
  -                ai.setName( name );
  -                Method gm=(Method)getAttMap.get(name);
  -                if( gm!=null ) {
  -                    //ai.setGetMethodObj( gm );
  -                    ai.setGetMethod( gm.getName());
  -                    Class t=gm.getReturnType();
  -                    if( t!=null )
  -                        ai.setType( t.getName() );
  -                }
  -                Method sm=(Method)setAttMap.get(name);
  -                if( sm!=null ) {
  -                    //ai.setSetMethodObj(sm);
  -                    Class t=sm.getParameterTypes()[0];
  -                    if( t!=null )
  -                        ai.setType( t.getName());
  -                    ai.setSetMethod( sm.getName());
  -                }
  -                ai.setDescription("Introspected attribute " + name);
  -                if( log.isDebugEnabled()) log.debug("Introspected attribute " +
  -                        name + " " + gm + " " + sm);
  -                mbean.addAttribute(ai);
  -            }
  -
  -            en=invokeAttMap.keys();
  -            while( en.hasMoreElements() ) {
  -                String name=(String)en.nextElement();
  -                Method m=(Method)invokeAttMap.get(name);
  -                if( m!=null && name != null ) {
  -                    OperationInfo op=new OperationInfo();
  -                    op.setName(name);
  -                    op.setReturnType(m.getReturnType().getName());
  -                    Class parms[]=m.getParameterTypes();
  -                    for(int i=0; i<parms.length; i++ ) {
  -                        ParameterInfo pi=new ParameterInfo();
  -                        pi.setType(parms[i].getName());
  -                        op.addParameter(pi);
  -                    }
  -                    mbean.addOperation(op);
  -                } else {
  -                    log.error("Null arg " + name + " " + m );
  -                }
  -            }
  -
  -            if( log.isDebugEnabled())
  -                log.debug("Setting name: " + type );
  -            mbean.setName( type );
  -
  -            return mbean;
  +            DescriptorSource 
ds=getDescriptorSource("MbeansDescriptorsIntrospection");
  +            ds.loadDescriptors(this, type, type, realClass);
  +            System.out.println("Loading " + realClass.getName());
  +            return findManagedBean(realClass.getName());
           } catch( Exception ex ) {
               ex.printStackTrace();
  -            return null;
           }
  +        return null;
       }
   
  -
  -    // -------------------- Utils --------------------
  -
  -    private static String unCapitalize(String name) {
  -        if (name == null || name.length() == 0) {
  -            return name;
  -        }
  -        char chars[] = name.toCharArray();
  -        chars[0] = Character.toLowerCase(chars[0]);
  -        return new String(chars);
  -    }
   
   }
  
  
  

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

Reply via email to