You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/04/28 14:13:50 UTC
svn commit: r397877 - in /incubator/cayenne/trunk/cayenne-jpa/src:
main/java/org/apache/cayenne/jpa/map/ main/java/org/apache/cayenne/util/
test/java/org/apache/cayenne/jpa/bridge/
Author: aadamchik
Date: Fri Apr 28 05:13:45 2006
New Revision: 397877
URL: http://svn.apache.org/viewcvs?rev=397877&view=rev
Log:
changing JpaEntityMap traversal algorithm to the one based on annotations.
Added:
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TreeNodeChild.java
Removed:
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TraversableTreeNode.java
Modified:
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAbstractEntity.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttributeOverride.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddable.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddableAttribute.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddedId.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntity.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityListeners.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityMap.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityResult.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaId.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaJoinTable.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToMany.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaNamedQuery.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaSecondaryTable.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaSqlResultSetMapping.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaTable.java
incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TraversalUtil.java
incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAbstractEntity.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAbstractEntity.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAbstractEntity.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAbstractEntity.java Fri Apr 28 05:13:45 2006
@@ -58,13 +58,9 @@
import java.util.ArrayList;
import java.util.Collection;
-import org.apache.cayenne.util.TraversableTreeNode;
+import org.apache.cayenne.util.TreeNodeChild;
-public abstract class JpaAbstractEntity implements TraversableTreeNode {
-
- static final Class[] TRAVERSABLE_CHILDREN = new Class[] {
- JpaAttribute.class, JpaEmbeddedId.class, JpaId.class
- };
+public abstract class JpaAbstractEntity {
protected String className;
protected AccessType access;
@@ -84,23 +80,7 @@
protected Collection<JpaId> ids;
protected Collection<JpaAttribute> attributes;
- public Class[] getTraversableChildTypes() {
- return JpaAbstractEntity.TRAVERSABLE_CHILDREN;
- }
-
- public Object getTraversableChild(int nodeTypeIndex) {
- switch (nodeTypeIndex) {
- case 0:
- return attributes;
- case 1:
- return embeddedId;
- case 2:
- return ids;
- default:
- throw new ArrayIndexOutOfBoundsException(nodeTypeIndex);
- }
- }
-
+ @TreeNodeChild
public JpaEmbeddedId getEmbeddedId() {
return embeddedId;
}
@@ -109,6 +89,7 @@
this.embeddedId = embeddedId;
}
+ @TreeNodeChild
public JpaEntityListeners getEntityListeners() {
return entityListeners;
}
@@ -197,6 +178,7 @@
this.preUpdate = preUpdate;
}
+ @TreeNodeChild(type=JpaId.class)
public Collection<JpaId> getIds() {
if (ids == null) {
ids = new ArrayList<JpaId>();
@@ -205,6 +187,7 @@
return ids;
}
+ @TreeNodeChild(type=JpaAttribute.class)
public Collection<JpaAttribute> getAttributes() {
if (attributes == null) {
attributes = new ArrayList<JpaAttribute>();
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttribute.java Fri Apr 28 05:13:45 2006
@@ -61,6 +61,8 @@
import javax.persistence.EnumType;
import javax.persistence.TemporalType;
+import org.apache.cayenne.util.TreeNodeChild;
+
/**
* Represents a mapping of an entity attribute.
*
@@ -122,6 +124,7 @@
// **** Semantics properties
+ @TreeNodeChild
public JpaBasic getBasic() {
return basic;
}
@@ -131,6 +134,7 @@
this.basic = basic;
}
+ @TreeNodeChild
public JpaManyToMany getManyToMany() {
return manyToMany;
}
@@ -140,6 +144,7 @@
this.manyToMany = manyToMany;
}
+ @TreeNodeChild
public JpaManyToOne getManyToOne() {
return manyToOne;
}
@@ -149,6 +154,7 @@
this.manyToOne = manyToOne;
}
+ @TreeNodeChild
public JpaOneToMany getOneToMany() {
return oneToMany;
}
@@ -158,6 +164,7 @@
this.oneToMany = oneToMany;
}
+ @TreeNodeChild
public JpaOneToOne getOneToOne() {
return oneToOne;
}
@@ -193,6 +200,7 @@
// **** Mapping properties
+ @TreeNodeChild
public JpaColumn getColumn() {
return column;
}
@@ -202,6 +210,7 @@
this.column = column;
}
+ @TreeNodeChild(type=JpaJoinColumn.class)
public Collection<JpaJoinColumn> getJoinColumns() {
if (joinColumns == null) {
joinColumns = new ArrayList<JpaJoinColumn>() {
@@ -222,6 +231,7 @@
return joinColumns;
}
+ @TreeNodeChild
public JpaJoinTable getJoinTable() {
return joinTable;
}
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttributeOverride.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttributeOverride.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttributeOverride.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaAttributeOverride.java Fri Apr 28 05:13:45 2006
@@ -57,6 +57,8 @@
import javax.persistence.AttributeOverride;
+import org.apache.cayenne.util.TreeNodeChild;
+
public class JpaAttributeOverride {
protected String name;
@@ -74,6 +76,7 @@
}
}
+ @TreeNodeChild
public JpaColumn getColumn() {
return column;
}
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddable.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddable.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddable.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddable.java Fri Apr 28 05:13:45 2006
@@ -58,6 +58,8 @@
import java.util.ArrayList;
import java.util.Collection;
+import org.apache.cayenne.util.TreeNodeChild;
+
/**
* A descriptor of a persistent class whose instances are stored as an intrinsic part of
* an owning entity and share the identity of that entity.
@@ -78,6 +80,7 @@
this.access = access;
}
+ @TreeNodeChild(type=JpaEmbeddableAttribute.class)
public Collection<JpaEmbeddableAttribute> getEmbeddableAttributes() {
if (embeddableAttributes == null) {
embeddableAttributes = new ArrayList(5);
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddableAttribute.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddableAttribute.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddableAttribute.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddableAttribute.java Fri Apr 28 05:13:45 2006
@@ -58,6 +58,8 @@
import javax.persistence.EnumType;
import javax.persistence.TemporalType;
+import org.apache.cayenne.util.TreeNodeChild;
+
/**
* An attribute that belongs to {@link org.apache.cayenne.jpa.map.JpaEmbeddable}.
*
@@ -81,6 +83,7 @@
this.name = name;
}
+ @TreeNodeChild
public JpaBasic getBasic() {
return basic;
}
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddedId.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddedId.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddedId.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEmbeddedId.java Fri Apr 28 05:13:45 2006
@@ -58,29 +58,13 @@
import java.util.ArrayList;
import java.util.Collection;
-import org.apache.cayenne.util.TraversableTreeNode;
+import org.apache.cayenne.util.TreeNodeChild;
-public class JpaEmbeddedId implements TraversableTreeNode {
-
- static final Class[] TRAVERSABLE_CHILDREN = new Class[] {
- JpaAttributeOverride.class
- };
+public class JpaEmbeddedId {
protected String name;
protected Collection<JpaAttributeOverride> attributeOverrides;
- public Class[] getTraversableChildTypes() {
- return TRAVERSABLE_CHILDREN;
- }
-
- public Object getTraversableChild(int nodeTypeIndex) {
- if (nodeTypeIndex == 0) {
- return attributeOverrides;
- }
-
- throw new ArrayIndexOutOfBoundsException(nodeTypeIndex);
- }
-
public String getName() {
return name;
}
@@ -89,6 +73,7 @@
this.name = name;
}
+ @TreeNodeChild(type=JpaAttributeOverride.class)
public Collection<JpaAttributeOverride> getAttributeOverrides() {
if (attributeOverrides == null) {
attributeOverrides = new ArrayList<JpaAttributeOverride>();
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntity.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntity.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntity.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntity.java Fri Apr 28 05:13:45 2006
@@ -58,6 +58,8 @@
import java.util.ArrayList;
import java.util.Collection;
+import org.apache.cayenne.util.TreeNodeChild;
+
/**
* A JPA-compliant entity.
*
@@ -65,28 +67,6 @@
*/
public class JpaEntity extends JpaAbstractEntity {
- static final Class[] EXTRA_TRAVERSABLE_CHILDREN = new Class[] {
- JpaTable.class, JpaAttributeOverride.class, JpaNamedQuery.class
- };
- static final Class[] TRAVERSABLE_CHILDREN = new Class[JpaAbstractEntity.TRAVERSABLE_CHILDREN.length
- + EXTRA_TRAVERSABLE_CHILDREN.length];
-
- static {
- System.arraycopy(
- EXTRA_TRAVERSABLE_CHILDREN,
- 0,
- TRAVERSABLE_CHILDREN,
- 0,
- EXTRA_TRAVERSABLE_CHILDREN.length);
-
- System.arraycopy(
- JpaAbstractEntity.TRAVERSABLE_CHILDREN,
- 0,
- TRAVERSABLE_CHILDREN,
- EXTRA_TRAVERSABLE_CHILDREN.length,
- JpaAbstractEntity.TRAVERSABLE_CHILDREN.length);
- }
-
protected String name;
protected JpaTable table;
protected JpaInheritance inheritance;
@@ -101,25 +81,6 @@
protected Collection<JpaSecondaryTable> secondaryTables;
protected Collection<JpaPrimaryKeyJoinColumn> primaryKeyJoinColumns;
- public Class[] getTraversableChildTypes() {
- return JpaEntity.TRAVERSABLE_CHILDREN;
- }
-
- public Object getTraversableChild(int nodeTypeIndex) {
-
- switch (nodeTypeIndex) {
- case 0:
- return table;
- case 1:
- return attributeOverrides;
- case 2:
- return namedQueries;
- default:
- return super.getTraversableChild(nodeTypeIndex
- - EXTRA_TRAVERSABLE_CHILDREN.length);
- }
- }
-
public String getName() {
return name;
}
@@ -128,6 +89,7 @@
this.name = name;
}
+ @TreeNodeChild
public JpaDiscriminatorColumn getDiscriminatorColumn() {
return discriminatorColumn;
}
@@ -158,6 +120,7 @@
this.discriminatorValue = discriminatorValue;
}
+ @TreeNodeChild
public JpaInheritance getInheritance() {
return inheritance;
}
@@ -166,6 +129,7 @@
this.inheritance = inheritance;
}
+ @TreeNodeChild
public JpaSequenceGenerator getSequenceGenerator() {
return sequenceGenerator;
}
@@ -174,6 +138,7 @@
this.sequenceGenerator = sequenceGenerator;
}
+ @TreeNodeChild
public JpaSqlResultSetMapping getSqlResultSetMapping() {
return sqlResultSetMapping;
}
@@ -182,6 +147,7 @@
this.sqlResultSetMapping = sqlResultSetMapping;
}
+ @TreeNodeChild
public JpaTable getTable() {
return table;
}
@@ -190,6 +156,7 @@
this.table = table;
}
+ @TreeNodeChild
public JpaTableGenerator getTableGenerator() {
return tableGenerator;
}
@@ -202,6 +169,7 @@
* Returns a collection of attribute overrides. Attribute overrides allows to change
* the definition of attributes from a mapped superclass.
*/
+ @TreeNodeChild(type = JpaAttributeOverride.class)
public Collection<JpaAttributeOverride> getAttributeOverrides() {
if (attributeOverrides == null) {
attributeOverrides = new ArrayList<JpaAttributeOverride>();
@@ -210,6 +178,7 @@
return attributeOverrides;
}
+ @TreeNodeChild(type = JpaNamedNativeQuery.class)
public Collection<JpaNamedNativeQuery> getNamedNativeQueries() {
if (namedNativeQueries == null) {
namedNativeQueries = new ArrayList();
@@ -217,6 +186,7 @@
return namedNativeQueries;
}
+ @TreeNodeChild(type = JpaNamedQuery.class)
public Collection<JpaNamedQuery> getNamedQueries() {
if (namedQueries == null) {
namedQueries = new ArrayList();
@@ -229,6 +199,7 @@
* of a primary table. PK join columns used by subclasses in a
* {@link javax.persistence.InheritanceType#JOINED} mapping scenario.
*/
+ @TreeNodeChild(type = JpaPrimaryKeyJoinColumn.class)
public Collection<JpaPrimaryKeyJoinColumn> getPrimaryKeyJoinColumns() {
if (primaryKeyJoinColumns == null) {
primaryKeyJoinColumns = new ArrayList();
@@ -236,6 +207,7 @@
return primaryKeyJoinColumns;
}
+ @TreeNodeChild(type = JpaSecondaryTable.class)
public Collection<JpaSecondaryTable> getSecondaryTables() {
if (secondaryTables == null) {
secondaryTables = new ArrayList();
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityListeners.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityListeners.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityListeners.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityListeners.java Fri Apr 28 05:13:45 2006
@@ -58,6 +58,8 @@
import java.util.ArrayList;
import java.util.Collection;
+import org.apache.cayenne.util.TreeNodeChild;
+
/**
* A collection of entity listener descriptors.
*
@@ -69,6 +71,7 @@
protected Collection<JpaEntityListener> entityListeners;
+ @TreeNodeChild(type = JpaEntityListener.class)
public Collection<JpaEntityListener> getEntityListeners() {
if (entityListeners == null) {
entityListeners = new ArrayList<JpaEntityListener>();
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityMap.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityMap.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityMap.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityMap.java Fri Apr 28 05:13:45 2006
@@ -6,7 +6,7 @@
import javax.persistence.CascadeType;
import javax.persistence.FlushModeType;
-import org.apache.cayenne.util.TraversableTreeNode;
+import org.apache.cayenne.util.TreeNodeChild;
import org.objectstyle.cayenne.validation.ValidationResult;
/**
@@ -15,11 +15,7 @@
*
* @author Andrus Adamchik
*/
-public class JpaEntityMap implements TraversableTreeNode {
-
- static final Class[] TRAVERSABLE_CHILDREN = new Class[] {
- JpaEntity.class, JpaNamedQuery.class
- };
+public class JpaEntityMap {
// mapped properties
protected String packageName;
@@ -61,21 +57,6 @@
throw new UnsupportedOperationException("TODO");
}
- public Class[] getTraversableChildTypes() {
- return TRAVERSABLE_CHILDREN;
- }
-
- public Object getTraversableChild(int nodeTypeIndex) {
- switch (nodeTypeIndex) {
- case 0:
- return entities;
- case 1:
- return namedQueries;
- default:
- throw new ArrayIndexOutOfBoundsException(nodeTypeIndex);
- }
- }
-
/**
* Returns a JpaEntity describing a given persistent class.
*/
@@ -105,6 +86,7 @@
return null;
}
+ @TreeNodeChild
public JpaEntityListeners getDefaultEntityListeners() {
return defaultEntityListeners;
}
@@ -163,6 +145,7 @@
return cascades;
}
+ @TreeNodeChild(type = JpaEmbeddable.class)
public Collection<JpaEmbeddable> getEmbeddables() {
if (embeddables == null) {
embeddables = new ArrayList<JpaEmbeddable>();
@@ -171,6 +154,7 @@
return embeddables;
}
+ @TreeNodeChild(type = JpaEntity.class)
public Collection<JpaEntity> getEntities() {
if (entities == null) {
entities = new ArrayList<JpaEntity>();
@@ -179,6 +163,7 @@
return entities;
}
+ @TreeNodeChild(type = JpaMappedSuperclass.class)
public Collection<JpaMappedSuperclass> getMappedSuperclasses() {
if (mappedSuperclasses == null) {
mappedSuperclasses = new ArrayList<JpaMappedSuperclass>();
@@ -187,6 +172,7 @@
return mappedSuperclasses;
}
+ @TreeNodeChild(type = JpaNamedNativeQuery.class)
public Collection<JpaNamedNativeQuery> getNamedNativeQueries() {
if (namedNativeQueries == null) {
namedNativeQueries = new ArrayList<JpaNamedNativeQuery>();
@@ -195,6 +181,7 @@
return namedNativeQueries;
}
+ @TreeNodeChild(type = JpaNamedQuery.class)
public Collection<JpaNamedQuery> getNamedQueries() {
if (namedQueries == null) {
namedQueries = new ArrayList<JpaNamedQuery>();
@@ -203,6 +190,7 @@
return namedQueries;
}
+ @TreeNodeChild(type = JpaSequenceGenerator.class)
public Collection<JpaSequenceGenerator> getSequenceGenerators() {
if (sequenceGenerators == null) {
sequenceGenerators = new ArrayList<JpaSequenceGenerator>();
@@ -211,6 +199,7 @@
return sequenceGenerators;
}
+ @TreeNodeChild(type = JpaSqlResultSetMapping.class)
public Collection<JpaSqlResultSetMapping> getSqlResultSetMappings() {
if (sqlResultSetMappings == null) {
sqlResultSetMappings = new ArrayList<JpaSqlResultSetMapping>();
@@ -219,6 +208,7 @@
return sqlResultSetMappings;
}
+ @TreeNodeChild(type = JpaTableGenerator.class)
public Collection<JpaTableGenerator> getTableGenerators() {
if (tableGenerators == null) {
tableGenerators = new ArrayList<JpaTableGenerator>();
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityResult.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityResult.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityResult.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaEntityResult.java Fri Apr 28 05:13:45 2006
@@ -60,6 +60,8 @@
import javax.persistence.EntityResult;
+import org.apache.cayenne.util.TreeNodeChild;
+
public class JpaEntityResult {
protected String entityClassName;
@@ -80,6 +82,7 @@
}
}
+ @TreeNodeChild(type=JpaFieldResult.class)
public Collection<JpaFieldResult> getFieldResults() {
if (fieldResults == null) {
fieldResults = new ArrayList<JpaFieldResult>();
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaId.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaId.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaId.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaId.java Fri Apr 28 05:13:45 2006
@@ -57,6 +57,8 @@
import javax.persistence.TemporalType;
+import org.apache.cayenne.util.TreeNodeChild;
+
public class JpaId {
protected String name;
@@ -64,6 +66,7 @@
protected JpaGeneratedValue generatedValue;
protected TemporalType temporal = TemporalType.TIMESTAMP;
+ @TreeNodeChild
public JpaColumn getColumn() {
return column;
}
@@ -72,6 +75,7 @@
this.column = column;
}
+ @TreeNodeChild
public JpaGeneratedValue getGeneratedValue() {
return generatedValue;
}
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaJoinTable.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaJoinTable.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaJoinTable.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaJoinTable.java Fri Apr 28 05:13:45 2006
@@ -60,6 +60,8 @@
import javax.persistence.JoinTable;
+import org.apache.cayenne.util.TreeNodeChild;
+
public class JpaJoinTable {
protected String name;
@@ -120,6 +122,7 @@
this.schema = schema;
}
+ @TreeNodeChild(type = JpaJoinColumn.class)
public Collection<JpaJoinColumn> getInverseJoinColumns() {
if (inverseJoinColumns == null) {
inverseJoinColumns = new ArrayList<JpaJoinColumn>();
@@ -128,6 +131,7 @@
return inverseJoinColumns;
}
+ @TreeNodeChild(type = JpaJoinColumn.class)
public Collection<JpaJoinColumn> getJoinColumns() {
if (joinColumns == null) {
joinColumns = new ArrayList<JpaJoinColumn>();
@@ -136,6 +140,7 @@
return joinColumns;
}
+ @TreeNodeChild(type = JpaUniqueConstraint.class)
public Collection<JpaUniqueConstraint> getUniqueConstraints() {
if (uniqueConstraints == null) {
uniqueConstraints = new ArrayList<JpaUniqueConstraint>();
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToMany.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToMany.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToMany.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaManyToMany.java Fri Apr 28 05:13:45 2006
@@ -66,7 +66,7 @@
protected String targetEntityName;
protected FetchType fetch = FetchType.LAZY;
protected String mappedBy;
- protected Collection cascades;
+ protected Collection<CascadeType> cascades;
public JpaManyToMany() {
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaNamedQuery.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaNamedQuery.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaNamedQuery.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaNamedQuery.java Fri Apr 28 05:13:45 2006
@@ -60,8 +60,7 @@
import javax.persistence.NamedQuery;
-import org.apache.cayenne.util.HierarchicalTreeVisitor;
-import org.objectstyle.cayenne.project.ProjectPath;
+import org.apache.cayenne.util.TreeNodeChild;
public class JpaNamedQuery {
@@ -83,18 +82,6 @@
}
}
- public void traverse(HierarchicalTreeVisitor visitor, ProjectPath parentPath) {
- ProjectPath path = parentPath != null
- ? parentPath.appendToPath(this)
- : new ProjectPath(this);
-
- if (visitor.onStartNode(path)) {
- // TODO, andrus, 4/24/2006 - traverse the hints
-
- visitor.onFinishNode(path);
- }
- }
-
public String getName() {
return name;
}
@@ -111,6 +98,7 @@
this.query = query;
}
+ @TreeNodeChild(type=JpaQueryHint.class)
public Collection<JpaQueryHint> getHints() {
if (hints == null) {
hints = new ArrayList<JpaQueryHint>();
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaSecondaryTable.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaSecondaryTable.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaSecondaryTable.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaSecondaryTable.java Fri Apr 28 05:13:45 2006
@@ -60,6 +60,8 @@
import javax.persistence.SecondaryTable;
+import org.apache.cayenne.util.TreeNodeChild;
+
public class JpaSecondaryTable extends JpaTable {
protected Collection<JpaPrimaryKeyJoinColumn> primaryKeyJoinColumns;
@@ -86,6 +88,7 @@
}
}
+ @TreeNodeChild(type = JpaPrimaryKeyJoinColumn.class)
public Collection<JpaPrimaryKeyJoinColumn> getPrimaryKeyJoinColumns() {
if (primaryKeyJoinColumns == null) {
primaryKeyJoinColumns = new ArrayList<JpaPrimaryKeyJoinColumn>();
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaSqlResultSetMapping.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaSqlResultSetMapping.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaSqlResultSetMapping.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaSqlResultSetMapping.java Fri Apr 28 05:13:45 2006
@@ -60,6 +60,8 @@
import javax.persistence.SqlResultSetMapping;
+import org.apache.cayenne.util.TreeNodeChild;
+
public class JpaSqlResultSetMapping {
protected String name;
@@ -92,6 +94,7 @@
this.name = name;
}
+ @TreeNodeChild(type=JpaColumnResult.class)
public Collection<JpaColumnResult> getColumnResults() {
if (columnResults == null) {
columnResults = new ArrayList<JpaColumnResult>(5);
@@ -99,6 +102,7 @@
return columnResults;
}
+ @TreeNodeChild(type=JpaEntityResult.class)
public Collection<JpaEntityResult> getEntityResults() {
if (entityResults == null) {
entityResults = new ArrayList<JpaEntityResult>(5);
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaTable.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaTable.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaTable.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/map/JpaTable.java Fri Apr 28 05:13:45 2006
@@ -60,6 +60,8 @@
import javax.persistence.Table;
+import org.apache.cayenne.util.TreeNodeChild;
+
public class JpaTable {
protected String name;
@@ -109,6 +111,7 @@
this.schema = schema;
}
+ @TreeNodeChild(type = JpaUniqueConstraint.class)
public Collection<JpaUniqueConstraint> getUniqueConstraints() {
if (uniqueConstraints == null) {
uniqueConstraints = new ArrayList<JpaUniqueConstraint>(2);
Modified: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TraversalUtil.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TraversalUtil.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TraversalUtil.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TraversalUtil.java Fri Apr 28 05:13:45 2006
@@ -55,17 +55,60 @@
*/
package org.apache.cayenne.util;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.cayenne.jpa.JpaProviderException;
import org.objectstyle.cayenne.project.ProjectPath;
/**
- * Defines tree traversal utility methods.
+ * Defines tree traversal utility methods. Object tree sematics is determined using
+ * {@link org.apache.cayenne.util.TreeNodeChild} property getter annotation.
*
* @author Andrus Adamchik
*/
public class TraversalUtil {
+ static final ClassTraversalDescriptor noopDescriptor = new ClassTraversalDescriptor();
+ static final Map<String, ClassTraversalDescriptor> descriptors = new HashMap<String, ClassTraversalDescriptor>();
+
+ private static Method[] traversableGetters(Class nodeType) {
+
+ Collection<Method> getters = null;
+
+ Method[] methods = nodeType.getMethods();
+ for (int i = 0; i < methods.length; i++) {
+ if (methods[i].isAnnotationPresent(TreeNodeChild.class)
+ && !Void.TYPE.equals(methods[i].getReturnType())) {
+
+ if (getters == null) {
+ getters = new ArrayList<Method>(5);
+ }
+
+ getters.add(methods[i]);
+ }
+ }
+
+ return getters != null ? getters.toArray(new Method[getters.size()]) : null;
+ }
+
+ static synchronized ClassTraversalDescriptor getDescriptor(Class nodeType) {
+ String typeName = nodeType.getName();
+ ClassTraversalDescriptor descriptor = descriptors.get(typeName);
+ if (descriptor == null) {
+ Method[] getters = traversableGetters(nodeType);
+ descriptor = getters != null
+ ? new ClassTraversalDescriptor(getters)
+ : noopDescriptor;
+ descriptors.put(typeName, descriptor);
+ }
+
+ return descriptor;
+ }
+
/**
* Performs tree traversal with a given visitor. Any tree node object that implements
* {@link TraversableTreeNode} will have its children traversed as well.
@@ -85,41 +128,83 @@
if (visitor.onStartNode(path)) {
- if (node instanceof TraversableTreeNode) {
+ ClassTraversalDescriptor descriptor = getDescriptor(node.getClass());
+ Class[] childTypes = descriptor.getTraversableChildTypes();
+ if (childTypes != null && childTypes.length > 0) {
+ for (int i = 0; i < childTypes.length; i++) {
+
+ HierarchicalTreeVisitor childVisitor = visitor.childVisitor(
+ path,
+ childTypes[i]);
+ if (childVisitor != null) {
+ Object child = descriptor.getTraversableChild(node, i);
- TraversableTreeNode treeNode = (TraversableTreeNode) node;
-
- Class[] childTypes = treeNode.getTraversableChildTypes();
- if (childTypes != null && childTypes.length > 0) {
- for (int i = 0; i < childTypes.length; i++) {
-
- HierarchicalTreeVisitor childVisitor = visitor.childVisitor(
- path,
- childTypes[i]);
- if (childVisitor != null) {
- Object child = treeNode.getTraversableChild(i);
-
- if (child == null) {
- continue;
- }
- else if (child instanceof Collection) {
- Collection children = (Collection) child;
+ if (child == null) {
+ continue;
+ }
+ else if (child instanceof Collection) {
+ Collection children = (Collection) child;
- if (children != null && !children.isEmpty()) {
- for (Object collectionChild : children) {
- traverse(collectionChild, childVisitor, path);
- }
+ if (children != null && !children.isEmpty()) {
+ for (Object collectionChild : children) {
+ traverse(collectionChild, childVisitor, path);
}
}
- else {
- traverse(child, childVisitor, path);
- }
+ }
+ else {
+ traverse(child, childVisitor, path);
}
}
}
}
visitor.onFinishNode(path);
+ }
+ }
+
+ static class ClassTraversalDescriptor {
+
+ Class[] traversableChildTypes;
+ Method[] traversableGetters;
+
+ ClassTraversalDescriptor() {
+
+ }
+
+ ClassTraversalDescriptor(Method[] traversableChildGetters) {
+ this.traversableGetters = traversableChildGetters;
+ this.traversableChildTypes = new Class[traversableChildGetters.length];
+ for (int i = 0; i < traversableChildGetters.length; i++) {
+ Class type = traversableChildGetters[i].getReturnType();
+ if (Collection.class.isAssignableFrom(type)) {
+ type = traversableChildGetters[i]
+ .getAnnotation(TreeNodeChild.class)
+ .type();
+
+ // TODO: andrus, 4/27/2006 - determine type from collection generics
+ // metadata.
+ if (void.class.equals(type)) {
+ throw new JpaProviderException("No type for collection defined: "
+ + traversableChildGetters[i].getName());
+ }
+ }
+
+ traversableChildTypes[i] = type;
+ }
+ }
+
+ Class[] getTraversableChildTypes() {
+ return traversableChildTypes;
+ }
+
+ Object getTraversableChild(Object object, int childIndex) {
+
+ try {
+ return traversableGetters[childIndex].invoke(object, (Object[]) null);
+ }
+ catch (Exception e) {
+ throw new JpaProviderException("Error reading traversible property", e);
+ }
}
}
}
Added: incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TreeNodeChild.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TreeNodeChild.java?rev=397877&view=auto
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TreeNodeChild.java (added)
+++ incubator/cayenne/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/util/TreeNodeChild.java Fri Apr 28 05:13:45 2006
@@ -0,0 +1,75 @@
+/* ====================================================================
+ *
+ * The ObjectStyle Group Software License, version 1.1
+ * ObjectStyle Group - http://objectstyle.org/
+ *
+ * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
+ * of the software. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution, if any,
+ * must include the following acknowlegement:
+ * "This product includes software developed by independent contributors
+ * and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
+ * Alternately, this acknowlegement may appear in the software itself,
+ * if and wherever such third-party acknowlegements normally appear.
+ *
+ * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
+ * or promote products derived from this software without prior written
+ * permission. For written permission, email
+ * "andrus at objectstyle dot org".
+ *
+ * 5. Products derived from this software may not be called "ObjectStyle"
+ * or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
+ * names without prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals and hosted on ObjectStyle Group web site. For more
+ * information on the ObjectStyle Group, please see
+ * <http://objectstyle.org/>.
+ */
+package org.apache.cayenne.util;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotates a public getter for the child property during the tree traversal. If an
+ * object implements {@link org.apache.cayenne.util.TraversableTreeNode}, this annotation
+ * is ignored.
+ *
+ * @author Andrus Adamchik
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface TreeNodeChild {
+
+ Class type() default void.class;
+}
Modified: incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java?rev=397877&r1=397876&r2=397877&view=diff
==============================================================================
--- incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java (original)
+++ incubator/cayenne/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java Fri Apr 28 05:13:45 2006
@@ -55,20 +55,30 @@
*/
package org.apache.cayenne.jpa.bridge;
+import java.util.Iterator;
+
import junit.framework.Assert;
+import org.apache.cayenne.jpa.map.JpaEntity;
+import org.apache.cayenne.jpa.map.JpaNamedNativeQuery;
+import org.apache.cayenne.jpa.map.JpaNamedQuery;
+import org.apache.cayenne.jpa.map.JpaSecondaryTable;
+import org.apache.cayenne.jpa.map.JpaTable;
+import org.apache.cayenne.jpa.map.JpaUniqueConstraint;
import org.objectstyle.cayenne.map.DataMap;
+import org.objectstyle.cayenne.map.DbEntity;
+import org.objectstyle.cayenne.map.ObjEntity;
public class DataMapMappingAssertion extends Assert {
public void testDataMap(DataMap dataMap) {
assertNotNull(dataMap);
assertEquals("n1", dataMap.getName());
-
+
assertNotNull(dataMap.getObjEntities());
assertEquals(5, dataMap.getObjEntities().size());
- // Iterator<ObjEntity> entityIt = dataMap.getObjEntities().iterator();
- // assertEntity1(entityIt.next());
+ Iterator<ObjEntity> entityIt = dataMap.getObjEntities().iterator();
+ assertEntity1(entityIt.next());
// assertEntity2(entityIt.next());
// assertEntity3(entityIt.next());
// assertEntity4(entityIt.next());
@@ -113,11 +123,26 @@
// TODO: NOT SUPPORTED YET - Sequencegenerators (In fact we can support that
// already...)
-// assertEquals(2, entityMap.getSequenceGenerators().size());
-// assertSequenceGenerator1(entityMap.getSequenceGenerators().iterator().next());
+ // assertEquals(2, entityMap.getSequenceGenerators().size());
+ // assertSequenceGenerator1(entityMap.getSequenceGenerators().iterator().next());
// TODO: NOT SUPPORTED YET - Table Generators (we can support that already)
// assertEquals(2, entityMap.getTableGenerators().size());
// assertTableGenerator(entityMap.getTableGenerators().iterator().next());
+ }
+
+ protected void assertEntity1(ObjEntity entity1) {
+ assertNotNull(entity1);
+ assertEquals("MockEntity1", entity1.getName());
+ assertEquals("org.apache.cayenne.jpa.entity.MockEntity1", entity1.getClassName());
+
+ assertTable(entity1.getDbEntity());
+ }
+
+ protected void assertTable(DbEntity table) {
+ assertNotNull(table);
+ assertEquals("mock_persistent_1", table.getName());
+ assertEquals("catalog1", table.getCatalog());
+ assertEquals("schema1", table.getSchema());
}
}