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 2004/06/02 22:09:04 UTC

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

brj         2004/06/02 13:09:04

  Modified:    src/java/org/apache/ojb/broker/metadata
                        DescriptorRepository.java
  Log:
  modified getAllConcreteSubclassDescriptors to return descriptors in predictable order
  
  Revision  Changes    Path
  1.50      +21 -6     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.49
  retrieving revision 1.50
  diff -u -r1.49 -r1.50
  --- DescriptorRepository.java	4 Apr 2004 23:53:34 -0000	1.49
  +++ DescriptorRepository.java	2 Jun 2004 20:09:03 -0000	1.50
  @@ -309,7 +309,8 @@
       /**
        *
        * Utility method to discover all concrete subclasses of a given super class. <br>
  -     * This method was introduced in order to get Extent Aware Iterators.
  +     * This method was introduced in order to get Extent Aware Iterators. <br>
  +     * Attention: The order of the returned collection is not predictable !
        * @deprecated use getAllConcreteSubclassDescriptors
        * @return a List of Class objects
        */
  @@ -349,8 +350,10 @@
        */
       public Collection getAllConcreteSubclassDescriptors(ClassDescriptor aCld)
       {
  -        // BRJ: set to prevent duplicates
  -        Set concreteSubclassClds = new HashSet();
  +        // BRJ: As long as we do not have an ordered Set
  +        // duplicates have to be prevented manually.
  +        // a HashSet should not be used because the order is unpredictable
  +        Collection concreteSubclassClds = new ArrayList();
           Iterator iter = aCld.getExtentClasses().iterator();
   
           while (iter.hasNext())
  @@ -364,15 +367,27 @@
               }
               if (!extCld.isInterface())
               {
  -                concreteSubclassClds.add(extCld);
  +                if (!concreteSubclassClds.contains(extCld))
  +                {
  +                    concreteSubclassClds.add(extCld);
  +                }
               }
   
               // recurse
  -            concreteSubclassClds.addAll(getAllConcreteSubclassDescriptors(extCld));
  +            Iterator subIter = getAllConcreteSubclassDescriptors(extCld).iterator();
  +            while (subIter.hasNext())
  +            {
  +                ClassDescriptor subCld = (ClassDescriptor)subIter.next();  
  +                if (!concreteSubclassClds.contains(subCld))
  +                {
  +                    concreteSubclassClds.add(subCld);
  +                }
  +            }
           }
   
           return concreteSubclassClds;
       }
  +
   
       /**
        * Checks if repository contains given class.
  
  
  

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