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 ar...@apache.org on 2005/04/22 19:08:14 UTC

cvs commit: db-ojb/src/java/org/apache/ojb/broker/metadata SuperReferenceDescriptor.java ClassDescriptor.java ObjectReferenceDescriptor.java RepositoryXmlHandler.java

arminw      2005/04/22 10:08:14

  Modified:    src/java/org/apache/ojb/broker/accesslayer/sql Tag:
                        OJB_1_0_RELEASE SqlQueryStatement.java
               src/java/org/apache/ojb/broker/metadata Tag: OJB_1_0_RELEASE
                        ClassDescriptor.java ObjectReferenceDescriptor.java
                        RepositoryXmlHandler.java
  Added:       src/java/org/apache/ojb/broker/metadata Tag: OJB_1_0_RELEASE
                        SuperReferenceDescriptor.java
  Log:
  Introduce new class SuperReferenceDescriptor. This class manage inheritance when super class fields be mapped to the super-table
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.75.2.5  +16 -4     db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java
  
  Index: SqlQueryStatement.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/accesslayer/sql/SqlQueryStatement.java,v
  retrieving revision 1.75.2.4
  retrieving revision 1.75.2.5
  diff -u -r1.75.2.4 -r1.75.2.5
  --- SqlQueryStatement.java	13 Jan 2005 19:20:03 -0000	1.75.2.4
  +++ SqlQueryStatement.java	22 Apr 2005 17:08:13 -0000	1.75.2.5
  @@ -31,9 +31,21 @@
   import org.apache.ojb.broker.metadata.FieldDescriptor;
   import org.apache.ojb.broker.metadata.FieldHelper;
   import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;
  -import org.apache.ojb.broker.metadata.fieldaccess.AnonymousPersistentFieldForInheritance;
   import org.apache.ojb.broker.platforms.Platform;
  -import org.apache.ojb.broker.query.*;
  +import org.apache.ojb.broker.query.BetweenCriteria;
  +import org.apache.ojb.broker.query.Criteria;
  +import org.apache.ojb.broker.query.ExistsCriteria;
  +import org.apache.ojb.broker.query.FieldCriteria;
  +import org.apache.ojb.broker.query.InCriteria;
  +import org.apache.ojb.broker.query.LikeCriteria;
  +import org.apache.ojb.broker.query.MtoNQuery;
  +import org.apache.ojb.broker.query.NullCriteria;
  +import org.apache.ojb.broker.query.Query;
  +import org.apache.ojb.broker.query.QueryByCriteria;
  +import org.apache.ojb.broker.query.QueryBySQL;
  +import org.apache.ojb.broker.query.SelectionCriteria;
  +import org.apache.ojb.broker.query.SqlCriteria;
  +import org.apache.ojb.broker.query.UserAlias;
   import org.apache.ojb.broker.util.SqlHelper;
   import org.apache.ojb.broker.util.SqlHelper.PathInfo;
   import org.apache.ojb.broker.util.logging.Logger;
  @@ -1651,7 +1663,7 @@
               FieldDescriptor[] leftFields = objRef.getForeignKeyFieldDescriptors(cld);
   
               ClassDescriptor refCld = cld.getRepository().getDescriptorFor(objRef.getItemClassName());
  -            if (objRef.getPersistentField() instanceof AnonymousPersistentFieldForInheritance)
  +            if (objRef.isSuperReferenceDescriptor())
               {
                   TableAlias base_alias = getTableAliasForPath(name, null);
   
  
  
  
  No                   revision
  No                   revision
  1.88.2.14 +5 -11     db-ojb/src/java/org/apache/ojb/broker/metadata/ClassDescriptor.java
  
  Index: ClassDescriptor.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/ClassDescriptor.java,v
  retrieving revision 1.88.2.13
  retrieving revision 1.88.2.14
  diff -u -r1.88.2.13 -r1.88.2.14
  --- ClassDescriptor.java	22 Mar 2005 14:42:48 -0000	1.88.2.13
  +++ ClassDescriptor.java	22 Apr 2005 17:08:13 -0000	1.88.2.14
  @@ -297,6 +297,7 @@
       {
           this.superPersistentFieldDescriptors = superPersistentFieldDescriptors;
       }
  +
       public Vector getSuperPersistentFieldDescriptors()
       {
           return superPersistentFieldDescriptors;
  @@ -595,21 +596,14 @@
       }
   
       /**
  -     * Answers the ClassDescriptor referenced by 'super' ObjectReferenceDescriptor.
  +     * Answers the ClassDescriptor referenced by 'super' ReferenceDescriptor.
        * @return ClassDescriptor or null
        */
  -    private ClassDescriptor getSuperClassDescriptor()
  +    public ClassDescriptor getSuperClassDescriptor()
       {
           if (!m_superCldSet)
           {
  -            ObjectReferenceDescriptor superOrd = (ObjectReferenceDescriptor) getObjectReferenceDescriptorsNameMap()
  -                    .get(AnonymousObjectReferenceDescriptor.ANONYMOUS_NAME);
  -
  -            if (superOrd != null)
  -            {
  -                m_superCld = getRepository().getDescriptorFor(superOrd.getItemClass());
  -            }
  -
  +            if(getBaseClass() != null) m_superCld = getRepository().getDescriptorFor(getBaseClass());
               m_superCldSet = true;
           }
   
  
  
  
  1.37.2.2  +33 -1     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.1
  retrieving revision 1.37.2.2
  diff -u -r1.37.2.1 -r1.37.2.2
  --- ObjectReferenceDescriptor.java	3 Apr 2005 02:20:43 -0000	1.37.2.1
  +++ ObjectReferenceDescriptor.java	22 Apr 2005 17:08:13 -0000	1.37.2.2
  @@ -126,10 +126,31 @@
   					else
   					{
   						fkfd = mif.getFieldDescriptorByName((String) fk);
  +                        /*
  +                        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
  +                        */
  +                        if (fkfd == null)
  +                        {
  +                            ClassDescriptor tmp = mif;
  +                            while(tmp.getSuperClassDescriptor() != null)
  +                            {
  +                                fkfd = tmp.getFieldDescriptorByName((String) fk);
  +                                if(fkfd != null)
  +                                {
  +                                    break;
  +                                }
  +                                else
  +                                {
  +                                    tmp = tmp.getSuperClassDescriptor();
  +                                }
  +                            }
  +                        }
   					}
   					if (fkfd == null)
   					{
  -						throw new OJBRuntimeException("Incorrect or not found field reference name '"
  +                        throw new OJBRuntimeException("Incorrect or not found field reference name '"
                                   + fk + "' in descriptor " + this + " for class-descriptor '"
                                   + mif.getClassNameOfObject() + "'");
   					}
  @@ -489,6 +510,17 @@
           m_OtmDependent = b;
       }
   
  +    /**
  +     * Returns <code>true</code> if this descriptor was used to
  +     * describe a reference to a super class of an object.
  +     *
  +     * @return always <code>false</code> for this instance.
  +     */
  +    public boolean isSuperReferenceDescriptor()
  +    {
  +        return false;
  +    }
  +
       public String toString()
       {
           return new ToStringBuilder(this)
  
  
  
  1.58.2.7  +13 -52    db-ojb/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java
  
  Index: RepositoryXmlHandler.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java,v
  retrieving revision 1.58.2.6
  retrieving revision 1.58.2.7
  diff -u -r1.58.2.6 -r1.58.2.7
  --- RepositoryXmlHandler.java	22 Mar 2005 14:42:48 -0000	1.58.2.6
  +++ RepositoryXmlHandler.java	22 Apr 2005 17:08:13 -0000	1.58.2.7
  @@ -16,14 +16,13 @@
    */
   
   import org.apache.ojb.broker.accesslayer.QueryCustomizer;
  -import org.apache.ojb.broker.metadata.fieldaccess.AnonymousPersistentFieldHelper;
  +import org.apache.ojb.broker.locking.IsolationLevels;
  +import org.apache.ojb.broker.locking.LockHelper;
   import org.apache.ojb.broker.metadata.fieldaccess.PersistentField;
   import org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldFactory;
   import org.apache.ojb.broker.util.ClassHelper;
   import org.apache.ojb.broker.util.logging.Logger;
   import org.apache.ojb.broker.util.logging.LoggerFactory;
  -import org.apache.ojb.broker.locking.IsolationLevels;
  -import org.apache.ojb.broker.locking.LockHelper;
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
   import org.xml.sax.SAXParseException;
  @@ -126,7 +125,8 @@
        */
       public void endDocument()
       {
  -        AnonymousPersistentFieldHelper.computeInheritedPersistentFields(m_repository);
  +        // arminw: no longer needed since SuperReferenceDescriptor was used
  +        // AnonymousPersistentFieldHelper.computeInheritedPersistentFields(m_repository);
           logger.debug("endDoc");
       }
   
  @@ -490,11 +490,14 @@
                           ObjectReferenceDescriptor ord = null;
                           if (name.equals(TAG_SUPER))
                           {
  -                            checkThis(classRef);
  -                            AnonymousObjectReferenceDescriptor aord =
  -                                new AnonymousObjectReferenceDescriptor(m_CurrentCLD);
  -                            aord.setPersistentField(null, TAG_SUPER);
  -                            ord = aord;
  +                            // no longer needed sine SuperReferenceDescriptor was used
  +//                            checkThis(classRef);
  +//                            AnonymousObjectReferenceDescriptor aord =
  +//                                new AnonymousObjectReferenceDescriptor(m_CurrentCLD);
  +//                            aord.setPersistentField(null, TAG_SUPER);
  +//                            ord = aord;
  +
  +                            ord = new SuperReferenceDescriptor(m_CurrentCLD);
                           }
                           else
                           {
  @@ -1182,46 +1185,4 @@
       {
           return (str != null && !str.trim().equals(""));
       }
  -
  -    /**
  -     * Check inheritance
  -     * author Houar TINE
  -     */
  -    private void checkThis(String classRef)
  -    {
  -        Class actualClass = m_CurrentCLD.getClassOfObject();
  -        String superClass = actualClass.getSuperclass().getName();
  -        if (superClass.equals(classRef))
  -        {
  -            if (null != m_CurrentCLD.getBaseClass())
  -            {
  -                throw new MetadataException(
  -                    "Multiple anonymous reference descriptor not authorized in "
  -                        + actualClass.getName());
  -            }
  -            m_CurrentCLD.setBaseClass(superClass);
  -        }
  -        else
  -        {
  -            if (superClass.equalsIgnoreCase(classRef))
  -            {
  -                throw new MetadataException(
  -                    "Classes name are case sensitive: super class of "
  -                        + actualClass.getName()
  -                        + " is "
  -                        + superClass
  -                        + " not "
  -                        + classRef);
  -            }
  -            else
  -            {
  -                throw new MetadataException(
  -                    "Class "
  -                        + classRef
  -                        + " is not a superclass of class "
  -                        + actualClass.getName());
  -            }
  -        }
  -
  -    }
   }
  
  
  
  No                   revision
  
  Index: RepositoryXmlHandler.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java,v
  retrieving revision 1.58.2.6
  retrieving revision 1.58.2.7
  diff -u -r1.58.2.6 -r1.58.2.7
  --- RepositoryXmlHandler.java	22 Mar 2005 14:42:48 -0000	1.58.2.6
  +++ RepositoryXmlHandler.java	22 Apr 2005 17:08:13 -0000	1.58.2.7
  @@ -16,14 +16,13 @@
    */
   
   import org.apache.ojb.broker.accesslayer.QueryCustomizer;
  -import org.apache.ojb.broker.metadata.fieldaccess.AnonymousPersistentFieldHelper;
  +import org.apache.ojb.broker.locking.IsolationLevels;
  +import org.apache.ojb.broker.locking.LockHelper;
   import org.apache.ojb.broker.metadata.fieldaccess.PersistentField;
   import org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldFactory;
   import org.apache.ojb.broker.util.ClassHelper;
   import org.apache.ojb.broker.util.logging.Logger;
   import org.apache.ojb.broker.util.logging.LoggerFactory;
  -import org.apache.ojb.broker.locking.IsolationLevels;
  -import org.apache.ojb.broker.locking.LockHelper;
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
   import org.xml.sax.SAXParseException;
  @@ -126,7 +125,8 @@
        */
       public void endDocument()
       {
  -        AnonymousPersistentFieldHelper.computeInheritedPersistentFields(m_repository);
  +        // arminw: no longer needed since SuperReferenceDescriptor was used
  +        // AnonymousPersistentFieldHelper.computeInheritedPersistentFields(m_repository);
           logger.debug("endDoc");
       }
   
  @@ -490,11 +490,14 @@
                           ObjectReferenceDescriptor ord = null;
                           if (name.equals(TAG_SUPER))
                           {
  -                            checkThis(classRef);
  -                            AnonymousObjectReferenceDescriptor aord =
  -                                new AnonymousObjectReferenceDescriptor(m_CurrentCLD);
  -                            aord.setPersistentField(null, TAG_SUPER);
  -                            ord = aord;
  +                            // no longer needed sine SuperReferenceDescriptor was used
  +//                            checkThis(classRef);
  +//                            AnonymousObjectReferenceDescriptor aord =
  +//                                new AnonymousObjectReferenceDescriptor(m_CurrentCLD);
  +//                            aord.setPersistentField(null, TAG_SUPER);
  +//                            ord = aord;
  +
  +                            ord = new SuperReferenceDescriptor(m_CurrentCLD);
                           }
                           else
                           {
  @@ -1182,46 +1185,4 @@
       {
           return (str != null && !str.trim().equals(""));
       }
  -
  -    /**
  -     * Check inheritance
  -     * author Houar TINE
  -     */
  -    private void checkThis(String classRef)
  -    {
  -        Class actualClass = m_CurrentCLD.getClassOfObject();
  -        String superClass = actualClass.getSuperclass().getName();
  -        if (superClass.equals(classRef))
  -        {
  -            if (null != m_CurrentCLD.getBaseClass())
  -            {
  -                throw new MetadataException(
  -                    "Multiple anonymous reference descriptor not authorized in "
  -                        + actualClass.getName());
  -            }
  -            m_CurrentCLD.setBaseClass(superClass);
  -        }
  -        else
  -        {
  -            if (superClass.equalsIgnoreCase(classRef))
  -            {
  -                throw new MetadataException(
  -                    "Classes name are case sensitive: super class of "
  -                        + actualClass.getName()
  -                        + " is "
  -                        + superClass
  -                        + " not "
  -                        + classRef);
  -            }
  -            else
  -            {
  -                throw new MetadataException(
  -                    "Class "
  -                        + classRef
  -                        + " is not a superclass of class "
  -                        + actualClass.getName());
  -            }
  -        }
  -
  -    }
   }
  
  
  
  No                   revision
  
  Index: RepositoryXmlHandler.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/metadata/RepositoryXmlHandler.java,v
  retrieving revision 1.58.2.6
  retrieving revision 1.58.2.7
  diff -u -r1.58.2.6 -r1.58.2.7
  --- RepositoryXmlHandler.java	22 Mar 2005 14:42:48 -0000	1.58.2.6
  +++ RepositoryXmlHandler.java	22 Apr 2005 17:08:13 -0000	1.58.2.7
  @@ -16,14 +16,13 @@
    */
   
   import org.apache.ojb.broker.accesslayer.QueryCustomizer;
  -import org.apache.ojb.broker.metadata.fieldaccess.AnonymousPersistentFieldHelper;
  +import org.apache.ojb.broker.locking.IsolationLevels;
  +import org.apache.ojb.broker.locking.LockHelper;
   import org.apache.ojb.broker.metadata.fieldaccess.PersistentField;
   import org.apache.ojb.broker.metadata.fieldaccess.PersistentFieldFactory;
   import org.apache.ojb.broker.util.ClassHelper;
   import org.apache.ojb.broker.util.logging.Logger;
   import org.apache.ojb.broker.util.logging.LoggerFactory;
  -import org.apache.ojb.broker.locking.IsolationLevels;
  -import org.apache.ojb.broker.locking.LockHelper;
   import org.xml.sax.Attributes;
   import org.xml.sax.SAXException;
   import org.xml.sax.SAXParseException;
  @@ -126,7 +125,8 @@
        */
       public void endDocument()
       {
  -        AnonymousPersistentFieldHelper.computeInheritedPersistentFields(m_repository);
  +        // arminw: no longer needed since SuperReferenceDescriptor was used
  +        // AnonymousPersistentFieldHelper.computeInheritedPersistentFields(m_repository);
           logger.debug("endDoc");
       }
   
  @@ -490,11 +490,14 @@
                           ObjectReferenceDescriptor ord = null;
                           if (name.equals(TAG_SUPER))
                           {
  -                            checkThis(classRef);
  -                            AnonymousObjectReferenceDescriptor aord =
  -                                new AnonymousObjectReferenceDescriptor(m_CurrentCLD);
  -                            aord.setPersistentField(null, TAG_SUPER);
  -                            ord = aord;
  +                            // no longer needed sine SuperReferenceDescriptor was used
  +//                            checkThis(classRef);
  +//                            AnonymousObjectReferenceDescriptor aord =
  +//                                new AnonymousObjectReferenceDescriptor(m_CurrentCLD);
  +//                            aord.setPersistentField(null, TAG_SUPER);
  +//                            ord = aord;
  +
  +                            ord = new SuperReferenceDescriptor(m_CurrentCLD);
                           }
                           else
                           {
  @@ -1182,46 +1185,4 @@
       {
           return (str != null && !str.trim().equals(""));
       }
  -
  -    /**
  -     * Check inheritance
  -     * author Houar TINE
  -     */
  -    private void checkThis(String classRef)
  -    {
  -        Class actualClass = m_CurrentCLD.getClassOfObject();
  -        String superClass = actualClass.getSuperclass().getName();
  -        if (superClass.equals(classRef))
  -        {
  -            if (null != m_CurrentCLD.getBaseClass())
  -            {
  -                throw new MetadataException(
  -                    "Multiple anonymous reference descriptor not authorized in "
  -                        + actualClass.getName());
  -            }
  -            m_CurrentCLD.setBaseClass(superClass);
  -        }
  -        else
  -        {
  -            if (superClass.equalsIgnoreCase(classRef))
  -            {
  -                throw new MetadataException(
  -                    "Classes name are case sensitive: super class of "
  -                        + actualClass.getName()
  -                        + " is "
  -                        + superClass
  -                        + " not "
  -                        + classRef);
  -            }
  -            else
  -            {
  -                throw new MetadataException(
  -                    "Class "
  -                        + classRef
  -                        + " is not a superclass of class "
  -                        + actualClass.getName());
  -            }
  -        }
  -
  -    }
   }
  
  
  
  1.1.2.1   +252 -0    db-ojb/src/java/org/apache/ojb/broker/metadata/Attic/SuperReferenceDescriptor.java
  
  
  
  

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