hammant     2002/10/20 03:25:51

  Modified:    src/java/org/apache/avalon/phoenix/tools/metagenerate
                        MetaGenerateQdoxTask.java XinfoFactory.java
               src/test/org/apache/avalon/phoenix/tools/metagenerate/test
                        IntegrationTestCase.java TestBlock.java
  Log:
  Start of inheritance work.  Though there issome bug in qdox I think.
  
  Revision  Changes    Path
  1.3       +11 -1     
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/metagenerate/MetaGenerateQdoxTask.java
  
  Index: MetaGenerateQdoxTask.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/metagenerate/MetaGenerateQdoxTask.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MetaGenerateQdoxTask.java 2 Oct 2002 11:11:58 -0000       1.2
  +++ MetaGenerateQdoxTask.java 20 Oct 2002 10:25:50 -0000      1.3
  @@ -22,6 +22,7 @@
   {
   
       private File m_destDir;
  +    private boolean m_inheritance = true;
   
       /**
        * Execute
  @@ -51,6 +52,15 @@
       }
   
       /**
  +     * Inheritence : should parent classes of blocks be queried too?
  +     * @param inheritance
  +     */
  +    public void setInheritance(boolean inheritance)
  +    {
  +        m_inheritance = inheritance;
  +    }
  +
  +    /**
        * Output the classes
        * @throws IOException If a problem writing output
        */
  @@ -63,7 +73,7 @@
               DocletTag block = javaClass.getTagByName("phoenix:block");
               if (block != null)
               {
  -                XinfoFactory factory = new XinfoFactory(m_destDir, javaClass);
  +                XinfoFactory factory = new XinfoFactory(m_destDir, javaClass, 
m_inheritance);
                   factory.generate();
               }
               DocletTag topic = javaClass.getTagByName("phoenix:mx-topic");
  
  
  
  1.5       +53 -7     
jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/metagenerate/XinfoFactory.java
  
  Index: XinfoFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/metagenerate/XinfoFactory.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- XinfoFactory.java 20 Oct 2002 09:19:29 -0000      1.4
  +++ XinfoFactory.java 20 Oct 2002 10:25:51 -0000      1.5
  @@ -13,6 +13,8 @@
   import com.thoughtworks.qdox.model.Type;
   import java.io.File;
   import java.io.IOException;
  +import java.util.HashMap;
  +import java.util.Iterator;
   
   /**
    * A Xinfo Factory
  @@ -22,16 +24,21 @@
   {
       private JavaClass m_javaClass;
       private File m_destDir;
  +    private HashMap m_services = new HashMap();
  +    private HashMap m_dependencies = new HashMap();
  +    private boolean m_inheritance;
  +
   
       /**
        * Construct a factory for a class.
        * @param destDir
        * @param javaClass
        */
  -    public XinfoFactory( File destDir, JavaClass javaClass )
  +    public XinfoFactory( File destDir, JavaClass javaClass, boolean inheritance )
       {
           m_javaClass = javaClass;
           m_destDir = destDir;
  +        m_inheritance = inheritance;
       }
   
       /**
  @@ -49,7 +56,7 @@
   
           // services
   
  -        processServiceInterfaces( xinfo );
  +        processServiceInterfaces( xinfo, m_inheritance );
   
           xinfo.writeEndOfServicesSection();
   
  @@ -68,15 +75,54 @@
        * @param xinfo the xinfo helper
        * @throws IOException If a problem
        */
  -    private void processServiceInterfaces( XinfoHelper xinfo ) throws IOException
  +    private void processServiceInterfaces( XinfoHelper xinfo, boolean inheritance )
  +            throws IOException
       {
  -        DocletTag[] services = m_javaClass.getTagsByName( "phoenix:service" );
  -        for( int i = 0; i < services.length; i++ )
  +        JavaClass javaClass = m_javaClass;
  +        while (m_javaClass == javaClass || (javaClass != null && inheritance))
           {
  -            DocletTag service = services[ i ];
  -            xinfo.writeServiceLines( service.getNamedParameter( "name" ),
  +            DocletTag[] services = javaClass.getTagsByName( "phoenix:service" );
  +            for( int i = 0; i < services.length; i++ )
  +            {
  +                DocletTag service = services[ i ];
  +                String serviceName = service.getNamedParameter( "name" );
  +                m_services.put( serviceName, service );
  +            }
  +            //javaClass = getParentClass(javaClass);  // Bug in QDox?
  +            javaClass = null;
  +        }
  +
  +
  +
  +        Iterator it = m_services.keySet().iterator();
  +        while (it.hasNext())
  +        {
  +            String serviceName = (String) it.next();
  +            DocletTag service = (DocletTag) m_services.get( serviceName );
  +            xinfo.writeServiceLines( serviceName,
                       service.getNamedParameter("version") );
  +
  +        }
  +
  +    }
  +
  +    private JavaClass getParentClass(JavaClass javaClass)
  +    {
  +        String parentClassName = javaClass.getSuperClass().getValue();
  +        System.out.println("--> p " + parentClassName);
  +        JavaClass[] parentSourceClasses = javaClass.getParentSource().getClasses();
  +        javaClass = null;
  +        for (int i = 0; i < parentSourceClasses.length; i++)
  +        {
  +            JavaClass parentClass = parentSourceClasses[i];
  +            System.out.println("--> p2 " + parentClass.getFullyQualifiedName());
  +            if (parentClassName.equals(parentClass.getFullyQualifiedName()))
  +            {
  +                javaClass = parentClass;
  +            }
  +
           }
  +        return javaClass;
       }
   
       /**
  
  
  
  1.4       +1 -0      
jakarta-avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/metagenerate/test/IntegrationTestCase.java
  
  Index: IntegrationTestCase.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/metagenerate/test/IntegrationTestCase.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- IntegrationTestCase.java  20 Oct 2002 09:19:29 -0000      1.3
  +++ IntegrationTestCase.java  20 Oct 2002 10:25:51 -0000      1.4
  @@ -110,6 +110,7 @@
       "      <!-- services that are offered by this block -->",
       "      <services>",
       "        <service name=\"blah.BlahService\" version=\"1.9\"/>",
  +    // "        <service name=\"blah.FooService\"/>",
       "      </services>",
       "",
       "      <!-- interfaces that may be exported to manange this block -->",
  
  
  
  1.3       +2 -2      
jakarta-avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/metagenerate/test/TestBlock.java
  
  Index: TestBlock.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/metagenerate/test/TestBlock.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TestBlock.java    20 Oct 2002 09:19:29 -0000      1.2
  +++ TestBlock.java    20 Oct 2002 10:25:51 -0000      1.3
  @@ -22,7 +22,7 @@
    * @phoenix:mx name="YeeeHaaa"
    *
    */
  -public class TestBlock implements Serviceable, Configurable
  +public class TestBlock extends TestParentBlock implements Serviceable, Configurable
   {
       /**
        * @phoenix:dependency name="blah.OtherBlahService" version="1.2"
  @@ -30,7 +30,7 @@
       public void service( final ServiceManager serviceManager )
           throws ServiceException
       {
  -
  +        super.service(serviceManager);
       }
   
       /**
  
  
  

--
To unsubscribe, e-mail:   <mailto:avalon-cvs-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@;jakarta.apache.org>

Reply via email to