You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by br...@apache.org on 2003/11/10 20:41:04 UTC

cvs commit: db-ojb/src/java/org/apache/ojb/broker/metadata DescriptorRepository.java

brj         2003/11/10 11:41:04

  Modified:    src/java/org/apache/ojb/broker/core
                        PersistenceBrokerImpl.java
               src/java/org/apache/ojb/broker/metadata
                        DescriptorRepository.java
  Log:
  simplified handling for getting all concrete subclass descriptors
  
  Revision  Changes    Path
  1.51      +10 -11    db-ojb/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java
  
  Index: PersistenceBrokerImpl.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/core/PersistenceBrokerImpl.java,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -u -r1.50 -r1.51
  --- PersistenceBrokerImpl.java	10 Nov 2003 13:09:27 -0000	1.50
  +++ PersistenceBrokerImpl.java	10 Nov 2003 19:41:04 -0000	1.51
  @@ -504,12 +504,11 @@
               String lastUsedTable = cld.getFullTableName();
               if (cld.isExtent())
               {
  -                Iterator extents = getDescriptorRepository().getAllConcreteSubclassesOf(cld).iterator();
  +                Iterator extents = getDescriptorRepository().getAllConcreteSubclassDescriptors(cld).iterator();
   
                   while (extents.hasNext())
                   {
  -                    Class ec = (Class) extents.next();
  -                    ClassDescriptor extCld = getClassDescriptor(ec);
  +                    ClassDescriptor extCld = (ClassDescriptor) extents.next();
   
                       // read same table only once
                       if (!extCld.getFullTableName().equals(lastUsedTable))
  @@ -1777,11 +1776,12 @@
           // we can lookup all tables of the extent classes:
           if (newObj == null && cld.isExtent())
           {
  -            Iterator extents = getDescriptorRepository().getAllConcreteSubclassesOf(cld).iterator();
  +            Iterator extents = getDescriptorRepository().getAllConcreteSubclassDescriptors(cld).iterator();
               
               while (extents.hasNext())
               {
  -                ClassDescriptor extCld = getClassDescriptor((Class)extents.next());
  +                ClassDescriptor extCld = (ClassDescriptor) extents.next();
  +                
                   newObj = dbAccess.materializeObject(extCld, oid);
                   if (newObj != null)
                   {
  @@ -2533,12 +2533,11 @@
               chainingIter.addIterator(factory.createRsIterator(query, cld, this));
           }
   
  -        Iterator extents = getDescriptorRepository().getAllConcreteSubclassesOf(cld).iterator();
  +        Iterator extents = getDescriptorRepository().getAllConcreteSubclassDescriptors(cld).iterator();
           while (extents.hasNext())
           {
  -            Class ec = (Class) extents.next();
  -            ClassDescriptor extCld = getClassDescriptor(ec);
  -
  +            ClassDescriptor extCld = (ClassDescriptor) extents.next();
  +            
               // read same table only once
               if (chainingIter.containsIteratorForTable(extCld.getFullTableName()))
               {
  @@ -2546,7 +2545,7 @@
               }
               else
               {    
  -                if(logger.isDebugEnabled()) logger.debug("Adding RsIterator of class ["+ec+"] to ChainingIterator");
  +                if(logger.isDebugEnabled()) logger.debug("Adding RsIterator of class ["+extCld.getClassNameOfObject()+"] to ChainingIterator");
   
                   // add the iterator to the chaining iterator.
                   chainingIter.addIterator(factory.createRsIterator(query, extCld, this));
  
  
  
  1.39      +31 -3     db-ojb/src/java/org/apache/ojb/broker/metadata/DescriptorRepository.java
  
  Index: DescriptorRepository.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/DescriptorRepository.java,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- DescriptorRepository.java	5 Nov 2003 20:33:11 -0000	1.38
  +++ DescriptorRepository.java	10 Nov 2003 19:41:04 -0000	1.39
  @@ -247,8 +247,7 @@
        *
        * Utility method to discover all concrete subclasses of a given super class. <br>
        * This method was introduced in order to get Extent Aware Iterators.
  -     * <b>TODO</b> : use a logger
  -     *
  +     * @deprecated use getAllConcreteSubclassDescriptors
        * @return a List of Class objects
        */
       public List getAllConcreteSubclassesOf(ClassDescriptor aCld)
  @@ -271,6 +270,35 @@
           }
           
           return new ArrayList(concreteSubclasses);
  +    }
  +
  +    /**
  +     *
  +     * Utility method to discover all concrete subclasses of a given super class. <br>
  +     * This method was introduced in order to get Extent Aware Iterators.
  +     *
  +     * @return a Collection of ClassDescriptor objects
  +     */
  +    public Collection getAllConcreteSubclassDescriptors(ClassDescriptor aCld)
  +    {
  +        // BRJ: set to prevent duplicates
  +        Set concreteSubclassClds = new HashSet();
  +        Iterator iter = aCld.getExtentClasses().iterator();
  +
  +        while (iter.hasNext())
  +        {
  +            Class extentClass = (Class) iter.next();
  +            ClassDescriptor extCld = getDescriptorFor(extentClass);
  +            if (!extCld.isInterface())
  +            {
  +                concreteSubclassClds.add(extCld);
  +            }
  +
  +            // recurse
  +            concreteSubclassClds.addAll(getAllConcreteSubclassDescriptors(extCld));
  +        }
  +
  +        return concreteSubclassClds;
       }
       
       /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org