arminw      2005/11/15 17:23:50

  Modified:    src/java/org/apache/ojb/broker/metadata Tag: OJB_1_0_RELEASE
                        ObjectReferenceDescriptor.java
  Log:
  minor improvement
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.37.2.5  +30 -43    
db-ojb/src/java/org/apache/ojb/broker/metadata/ObjectReferenceDescriptor.java
  
  Index: ObjectReferenceDescriptor.java
  ===================================================================
  RCS file: 
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/ObjectReferenceDescriptor.java,v
  retrieving revision 1.37.2.4
  retrieving revision 1.37.2.5
  diff -u -r1.37.2.4 -r1.37.2.5
  --- ObjectReferenceDescriptor.java    16 Nov 2005 00:58:38 -0000      1.37.2.4
  +++ ObjectReferenceDescriptor.java    16 Nov 2005 01:23:49 -0000      1.37.2.5
  @@ -91,10 +91,10 @@
       /**
        *
        */
  -     public FieldDescriptor[] getForeignKeyFieldDescriptors(ClassDescriptor 
mif)
  +     public FieldDescriptor[] getForeignKeyFieldDescriptors(ClassDescriptor 
cld)
        {
                FieldDescriptor[] foreignKeyFieldDescriptors;
  -             if ((foreignKeyFieldDescriptors = (FieldDescriptor[]) 
fkFieldMap.get(mif)) == null)
  +             if ((foreignKeyFieldDescriptors = (FieldDescriptor[]) 
fkFieldMap.get(cld)) == null)
                {
                        // 1. collect vector of indices of Fk-Fields
                        Vector v = getForeignKeyFields();
  @@ -103,13 +103,13 @@
                        if (v != null)
                        {
                                Vector ret;
  -                             if (mif.isInterface())
  +                             if (cld.isInterface())
                                {
                                        //exchange interface class descriptor 
with first concrete
                                        //class
  -                                     Vector extents = mif.getExtentClasses();
  +                                     Vector extents = cld.getExtentClasses();
                                        Class firstConcreteClass = (Class) 
extents.get(0);
  -                                     mif = 
getClassDescriptor().getRepository().getDescriptorFor(firstConcreteClass);
  +                                     cld = 
getClassDescriptor().getRepository().getDescriptorFor(firstConcreteClass);
                                }
                                ret = new Vector();
   
  @@ -117,44 +117,31 @@
                                while (iter.hasNext())
                                {
                                        Object fk = iter.next();
  -                                     FieldDescriptor fkfd;
  -                                     if (fk instanceof Integer)
  -                                     {
  -                                             Integer index = (Integer) fk;
  -                                             fkfd = 
mif.getFieldDescriptorByIndex(index.intValue());
  -                                     }
  -                                     else
  -                                     {
  -                                             fkfd = 
mif.getFieldDescriptorByName((String) fk);
  -                                     }
  -                    if (fkfd == null)
  +                                     FieldDescriptor fkfd = null;
  +                                     /*
  +                    OJB-55
  +                    it's possible that the FK field is declared in the super 
classes of this object,
  +                    so we can search for a valid field in super 
class-descriptor
  +                    */
  +                    ClassDescriptor tmp = cld;
  +                    while(tmp != null)
                       {
  -                        /*
  -                        OJB-55
  -                        arminw:
  -                        it's possible that the FK field is declared in the 
super classes of this object,
  -                        so we can search for a valid field in super 
class-descriptor
  -                        */
  -                        ClassDescriptor tmp = mif;
  -                        while(tmp.getSuperClassDescriptor() != null)
  +                        if (fk instanceof Integer)
  +                        {
  +                            Integer index = (Integer) fk;
  +                            fkfd = 
cld.getFieldDescriptorByIndex(index.intValue());
  +                        }
  +                        else
  +                        {
  +                            fkfd = tmp.getFieldDescriptorByName((String) fk);
  +                        }
  +                        if(fkfd != null)
  +                        {
  +                            break;
  +                        }
  +                        else
                           {
  -                            if (fk instanceof Integer)
  -                                                     {
  -                                                             Integer index = 
(Integer) fk;
  -                                                             fkfd = 
tmp.getFieldDescriptorByIndex(index.intValue());
  -                                                     }
  -                                                     else
  -                                                     {
  -                                                             fkfd = 
tmp.getFieldDescriptorByName((String) fk);
  -                                                     }
  -                            if(fkfd != null)
  -                            {
  -                                break;
  -                            }
  -                            else
  -                            {
  -                                tmp = tmp.getSuperClassDescriptor();
  -                            }
  +                            tmp = tmp.getSuperClassDescriptor();
                           }
                       }
   
  @@ -162,12 +149,12 @@
                                        {
                           throw new OJBRuntimeException("Incorrect or not 
found field reference name '"
                                   + fk + "' in descriptor " + this + " for 
class-descriptor '"
  -                                + mif.getClassNameOfObject() + "'");
  +                                + (cld != null ? cld.getClassNameOfObject() 
+ "'" : "'null'"));
                                        }
                                        ret.add(fkfd);
                                }
                                foreignKeyFieldDescriptors = 
(FieldDescriptor[]) ret.toArray(new FieldDescriptor[ret.size()]);
  -                             fkFieldMap.put(mif, foreignKeyFieldDescriptors);
  +                             fkFieldMap.put(cld, foreignKeyFieldDescriptors);
                        }
                }
                return foreignKeyFieldDescriptors;
  
  
  

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

Reply via email to