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