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/30 23:54:41 UTC
svn commit: r398449 - in /incubator/cayenne/jpa/trunk:
cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/
cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/
cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/ ...
Author: aadamchik
Date: Sun Apr 30 14:54:38 2006
New Revision: 398449
URL: http://svn.apache.org/viewcvs?rev=398449&view=rev
Log:
map converter is in a good enough state to run the example SQLTemplates and SelectQueries
now we need a class enhancer..
Modified:
incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Department.java
incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Person.java
incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Project.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoader.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoader.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaClassDescriptor.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaLoaderContext.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaPersistenceProvider.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapConverterTest.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoaderTest.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessorTest.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/JpaClassDescriptorTest.java
incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/MockAnnotatedBean3.java
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Department.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Department.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Department.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Department.java Sun Apr 30 14:54:38 2006
@@ -18,6 +18,7 @@
import java.util.List;
import javax.persistence.Entity;
+import javax.persistence.Id;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.QueryHint;
@@ -31,6 +32,9 @@
})
public class Department {
+ @Id
+ protected int department_id;
+
protected String name;
protected String description;
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Person.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Person.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Person.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Person.java Sun Apr 30 14:54:38 2006
@@ -19,12 +19,16 @@
import java.util.List;
import javax.persistence.Entity;
+import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@Entity
public class Person {
+
+ @Id
+ protected int person_id;
protected double baseSalary;
protected Date dateHired;
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Project.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Project.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Project.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa-annotations-example/src/main/java/org/apache/cayenne/jpa/example/entity/Project.java Sun Apr 30 14:54:38 2006
@@ -18,20 +18,24 @@
import java.util.List;
import javax.persistence.Entity;
+import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@Entity
public class Project {
+ @Id
+ protected int project_id;
+
protected String name;
-
+
@ManyToOne
protected Department department;
-
+
@ManyToOne
protected Person manager;
-
+
@OneToMany
protected List<Person> members;
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/bridge/DataMapConverter.java Sun Apr 30 14:54:38 2006
@@ -20,12 +20,14 @@
import org.apache.cayenne.jpa.JpaProviderException;
import org.apache.cayenne.jpa.conf.JpaLoaderContext;
+import org.apache.cayenne.jpa.conf.JpaPropertyDescriptor;
import org.apache.cayenne.jpa.map.AccessType;
import org.apache.cayenne.jpa.map.JpaAttribute;
import org.apache.cayenne.jpa.map.JpaBasic;
import org.apache.cayenne.jpa.map.JpaColumn;
import org.apache.cayenne.jpa.map.JpaEntity;
import org.apache.cayenne.jpa.map.JpaEntityMap;
+import org.apache.cayenne.jpa.map.JpaId;
import org.apache.cayenne.jpa.map.JpaManyToMany;
import org.apache.cayenne.jpa.map.JpaManyToOne;
import org.apache.cayenne.jpa.map.JpaNamedQuery;
@@ -62,16 +64,13 @@
protected ProjectPath targetPath;
protected HierarchicalTreeVisitor visitor;
- public DataMapConverter(JpaLoaderContext context) {
+ public synchronized DataMap toDataMap(String name, JpaLoaderContext context) {
this.context = context;
- }
-
- public synchronized DataMap toDataMap(String name, JpaEntityMap jpaMap) {
// reset
DataMap dataMap = new DataMap(name);
- dataMap.setDefaultPackage(jpaMap.getPackageName());
- dataMap.setDefaultSchema(jpaMap.getSchema());
+ dataMap.setDefaultPackage(context.getEntityMap().getPackageName());
+ dataMap.setDefaultSchema(context.getEntityMap().getSchema());
this.targetPath = new ProjectPath(dataMap);
@@ -79,7 +78,7 @@
visitor = createVisitor();
}
- TraversalUtil.traverse(jpaMap, visitor);
+ TraversalUtil.traverse(context.getEntityMap(), visitor);
return dataMap;
}
@@ -212,6 +211,53 @@
}
}
+ class JpaIdColumnVisitor extends BaseTreeVisitor {
+
+ @Override
+ public boolean onStartNode(ProjectPath path) {
+ JpaColumn jpaColumn = (JpaColumn) path.getObject();
+
+ DbAttribute dbAttribute = new DbAttribute(jpaColumn.getName());
+
+ // TODO, andrus, 4/28/2006 - per JPA spec, is there a way to override the type
+ // doing conversion implicitly???
+
+ JpaEntity jpaEntity = (JpaEntity) path.firstInstanceOf(JpaEntity.class);
+ JpaId jpaId = (JpaId) path.firstInstanceOf(JpaId.class);
+
+ JpaPropertyDescriptor property = context.getLoadedDescriptor(
+ jpaEntity.getClassName()).getProperty(jpaId.getName());
+
+ dbAttribute.setType(TypesMapping.getSqlTypeByJava(property.getType()));
+
+ dbAttribute.setMandatory(true);
+ dbAttribute.setPrimaryKey(true);
+
+ // TODO, andrus, 4/28/2006 - note that Cayenne DbAttribute's precision is
+ // really scale (and precision is not defined at all). Fix this in
+ // DbAttribute.
+ dbAttribute.setPrecision(jpaColumn.getScale());
+
+ if (jpaColumn.getTable() == null) {
+ recordConflict(path, "No table defined for JpaColumn '"
+ + jpaColumn.getName());
+ return false;
+ }
+
+ DbEntity entity = ((DataMap) targetPath.firstInstanceOf(DataMap.class))
+ .getDbEntity(jpaColumn.getTable());
+
+ if (entity == null) {
+ recordConflict(path, "Invalid table definition for JpaColumn: "
+ + jpaColumn.getTable());
+ return false;
+ }
+
+ entity.addAttribute(dbAttribute);
+ return false;
+ }
+ }
+
class JpaEntityVisitor extends NestedVisitor {
JpaEntityVisitor() {
@@ -231,6 +277,11 @@
attributeVisitor.addChildVisitor(JpaBasic.class, new JpaBasicVisitor());
addChildVisitor(JpaAttribute.class, attributeVisitor);
+
+ BaseTreeVisitor idVisitor = new BaseTreeVisitor();
+ idVisitor.addChildVisitor(JpaColumn.class, new JpaIdColumnVisitor());
+ addChildVisitor(JpaId.class, idVisitor);
+
addChildVisitor(JpaTable.class, new JpaTableVisitor());
addChildVisitor(JpaNamedQuery.class, new JpaNamedQueryVisitor());
}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoader.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoader.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoader.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoader.java Sun Apr 30 14:54:38 2006
@@ -42,7 +42,6 @@
import org.apache.cayenne.jpa.JpaProviderException;
import org.apache.cayenne.jpa.map.JpaAbstractEntity;
-import org.apache.cayenne.jpa.map.JpaEntityMap;
import org.objectstyle.cayenne.util.Util;
/**
@@ -113,8 +112,7 @@
* Processes annotations of a single Java class, loading ORM mapping information to
* the provided entity map.
*/
- public void loadClassMapping(JpaEntityMap entityMap, Class managedClass)
- throws JpaProviderException {
+ public void loadClassMapping(Class managedClass) throws JpaProviderException {
Annotation[] classAnnotations = managedClass.getAnnotations();
@@ -122,7 +120,7 @@
Arrays.sort(classAnnotations, typeAnnotationsSorter);
AnnotationProcessorStack stack = context.createAnnotationProcessorContext();
- stack.push(entityMap);
+ stack.push(context.getEntityMap());
// === push class-level stuff
for (int i = 0; i < classAnnotations.length; i++) {
@@ -160,8 +158,7 @@
applyMemberAnnotations(property.getMember(), stack);
}
- for (JpaPropertyDescriptor property : descriptor
- .getPropertyDescriptors()) {
+ for (JpaPropertyDescriptor property : descriptor.getPropertyDescriptors()) {
applyMemberAnnotations(property.getMember(), stack);
}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessor.java Sun Apr 30 14:54:38 2006
@@ -239,8 +239,12 @@
JpaId id = (JpaId) path.getObject();
if (id.getColumn() == null) {
+
JpaColumn column = new JpaColumn(AnnotationPrototypes.getColumn());
column.setName(id.getName());
+
+ JpaEntity entity = (JpaEntity) path.getObjectParent();
+ column.setTable(entity.getTable().getName());
id.setColumn(column);
}
@@ -329,18 +333,10 @@
JpaEntity entity = (JpaEntity) path.firstInstanceOf(JpaEntity.class);
String name = relationship.getParent().getName();
- JpaEntityMap entityMap = (JpaEntityMap) path.getRoot();
JpaClassDescriptor srcDescriptor = context.getLoadedDescriptor(entity
.getClassName());
- JpaPropertyDescriptor property;
-
- if (entityMap.getAccess() == AccessType.FIELD) {
- property = srcDescriptor.getFieldDescriptor(name);
- }
- else {
- property = srcDescriptor.getPropertyDescriptor(name);
- }
+ JpaPropertyDescriptor property = srcDescriptor.getProperty(name);
Class targetEntityType = property.getTargetEntityType();
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoader.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoader.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoader.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/EntityMapLoader.java Sun Apr 30 14:54:38 2006
@@ -70,8 +70,7 @@
* from all locations supported by the JPA specification.
*/
public EntityMapLoader(PersistenceUnitInfo persistenceUnit) {
- this.context = new JpaLoaderContext();
- this.entityMap = loadEntityMap(persistenceUnit);
+ loadEntityMap(persistenceUnit);
}
/**
@@ -85,15 +84,16 @@
* Loads a combined entity map including managed class descriptors from all supported
* locations.
*/
- protected JpaEntityMap loadEntityMap(PersistenceUnitInfo persistenceUnit)
+ protected void loadEntityMap(PersistenceUnitInfo persistenceUnit)
throws JpaProviderException {
- try {
- JpaEntityMap baseMap = loadFromAnnotations(persistenceUnit);
- updateFromXML(baseMap, persistenceUnit);
- updateFromDefaults(baseMap);
+ this.entityMap = new JpaEntityMap();
+ this.context = new JpaLoaderContext(entityMap);
- return baseMap;
+ try {
+ loadFromAnnotations(persistenceUnit);
+ updateFromXML(entityMap, persistenceUnit);
+ updateFromDefaults(entityMap);
}
catch (JpaProviderException e) {
throw e;
@@ -165,11 +165,9 @@
}
/**
- * Creates a new JpaEntityMap based on metadata annotations of persistent classes.
+ * Loads JpaEntityMap based on metadata annotations of persistent classes.
*/
- protected JpaEntityMap loadFromAnnotations(PersistenceUnitInfo persistenceUnit) {
-
- JpaEntityMap map = new JpaEntityMap();
+ protected void loadFromAnnotations(PersistenceUnitInfo persistenceUnit) {
if (!persistenceUnit.getManagedClassNames().isEmpty()) {
@@ -187,11 +185,9 @@
throw new JpaProviderException("Class not found: " + className, e);
}
- annotationLoader.loadClassMapping(map, managedClass);
+ annotationLoader.loadClassMapping(managedClass);
}
}
-
- return map;
}
public JpaLoaderContext getContext() {
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaClassDescriptor.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaClassDescriptor.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaClassDescriptor.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaClassDescriptor.java Sun Apr 30 14:54:38 2006
@@ -26,6 +26,9 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.apache.cayenne.jpa.map.AccessType;
+import org.apache.cayenne.jpa.map.JpaEntityMap;
+
/**
* Provides the JPA information about a class, such potential persistence fields, etc.
*
@@ -39,49 +42,67 @@
protected Collection<JpaPropertyDescriptor> fieldDescriptors;
protected Collection<JpaPropertyDescriptor> propertyDescriptors;
protected Class managedClass;
+ protected JpaEntityMap entityMap;
- public JpaClassDescriptor(Class managedClass) {
+ public JpaClassDescriptor(JpaEntityMap entityMap, Class managedClass) {
this.managedClass = managedClass;
+ this.entityMap = entityMap;
}
public Class getManagedClass() {
return managedClass;
}
- public JpaPropertyDescriptor getFieldDescriptor(String name) {
- for (JpaPropertyDescriptor d : getFieldDescriptors()) {
- if (name.equals(d.getName())) {
- return d;
- }
- }
+ public boolean isFieldAccess() {
+ return entityMap.getAccess() == AccessType.FIELD;
+ }
- return null;
+ public boolean isPropertyAccess() {
+ return entityMap.getAccess() == AccessType.PROPERTY;
}
- public JpaPropertyDescriptor getPropertyDescriptor(String name) {
- for (JpaPropertyDescriptor d : getPropertyDescriptors()) {
- if (name.equals(d.getName())) {
- return d;
+ /**
+ * Returns descriptor matching the property name. If the underlying entity map uses
+ * FIELD access, a descritor is looked up in the list of class fields, if it uses
+ * PROPERTY access - descriptor is looked up in the list of class properties.
+ */
+ public JpaPropertyDescriptor getProperty(String name) {
+ if (isFieldAccess()) {
+ for (JpaPropertyDescriptor d : getFieldDescriptors()) {
+ if (name.equals(d.getName())) {
+ return d;
+ }
}
}
-
- return null;
- }
-
- public JpaPropertyDescriptor getFieldDescriptor(Member field) {
- for (JpaPropertyDescriptor d : getFieldDescriptors()) {
- if (d.getMember().equals(field)) {
- return d;
+ else if (isPropertyAccess()) {
+ for (JpaPropertyDescriptor d : getPropertyDescriptors()) {
+ if (name.equals(d.getName())) {
+ return d;
+ }
}
}
return null;
}
- public JpaPropertyDescriptor getPropertyDescriptor(Member getter) {
- for (JpaPropertyDescriptor d : getPropertyDescriptors()) {
- if (d.getMember().equals(getter)) {
- return d;
+ /**
+ * Returns descriptor matching the property name. Note that entity map access type is
+ * ignored and instead field vs. property descriptor is determined from the member
+ * type.
+ */
+ public JpaPropertyDescriptor getPropertyForMember(Member classMember) {
+ if (classMember instanceof Field) {
+ for (JpaPropertyDescriptor d : getFieldDescriptors()) {
+ if (d.getMember().equals(classMember)) {
+ return d;
+ }
+ }
+ }
+ else if (classMember instanceof Method) {
+ for (JpaPropertyDescriptor d : getPropertyDescriptors()) {
+ if (d.getMember().equals(classMember)) {
+ return d;
+ }
}
}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaLoaderContext.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaLoaderContext.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaLoaderContext.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/conf/JpaLoaderContext.java Sun Apr 30 14:54:38 2006
@@ -16,13 +16,12 @@
package org.apache.cayenne.jpa.conf;
import java.lang.reflect.AnnotatedElement;
-import java.lang.reflect.Field;
import java.lang.reflect.Member;
-import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
+import org.apache.cayenne.jpa.map.JpaEntityMap;
import org.objectstyle.cayenne.validation.SimpleValidationFailure;
import org.objectstyle.cayenne.validation.ValidationFailure;
import org.objectstyle.cayenne.validation.ValidationResult;
@@ -36,9 +35,15 @@
protected Map<String, JpaClassDescriptor> descriptors;
protected ValidationResult conflicts;
+ protected JpaEntityMap entityMap;
- public JpaLoaderContext() {
+ public JpaLoaderContext(JpaEntityMap map) {
this.conflicts = new ValidationResult();
+ this.entityMap = map;
+ }
+
+ public JpaEntityMap getEntityMap() {
+ return entityMap;
}
public AnnotationProcessorStack createAnnotationProcessorContext() {
@@ -60,14 +65,7 @@
if (element instanceof Member) {
Member member = (Member) element;
-
- JpaClassDescriptor classDescriptor = getDescriptor(member.getDeclaringClass());
- if (member instanceof Field) {
- return classDescriptor.getFieldDescriptor(member);
- }
- else if (member instanceof Method) {
- return classDescriptor.getPropertyDescriptor(member);
- }
+ return getDescriptor(member.getDeclaringClass()).getPropertyForMember(member);
}
return null;
@@ -89,7 +87,7 @@
}
if (descriptor == null) {
- descriptor = new JpaClassDescriptor(managedClass);
+ descriptor = new JpaClassDescriptor(entityMap, managedClass);
descriptors.put(name, descriptor);
}
@@ -147,4 +145,5 @@
buffer.toString()));
}
}
+
}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaPersistenceProvider.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaPersistenceProvider.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaPersistenceProvider.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/main/java/org/apache/cayenne/jpa/cspi/CjpaPersistenceProvider.java Sun Apr 30 14:54:38 2006
@@ -28,7 +28,6 @@
import org.apache.cayenne.jpa.bridge.DataMapConverter;
import org.apache.cayenne.jpa.conf.EntityMapLoader;
import org.apache.cayenne.jpa.conf.JpaLoaderContext;
-import org.apache.cayenne.jpa.map.JpaEntityMap;
import org.apache.cayenne.jpa.spi.JpaPersistenceProvider;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -98,10 +97,8 @@
configuration.addDomain(domain);
EntityMapLoader loader = new EntityMapLoader(info);
- JpaEntityMap jpaMap = loader.getEntityMap();
-
- DataMapConverter converter = new DataMapConverter(loader.getContext());
- DataMap cayenneMap = converter.toDataMap(name, jpaMap);
+ DataMapConverter converter = new DataMapConverter();
+ DataMap cayenneMap = converter.toDataMap(name, loader.getContext());
DataSource dataSource = info.getTransactionType() == PersistenceUnitTransactionType.JTA
? info.getJtaDataSource()
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapConverterTest.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapConverterTest.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapConverterTest.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapConverterTest.java Sun Apr 30 14:54:38 2006
@@ -38,8 +38,8 @@
// TODO: unsupported by DataMap
// jpaMap.setCatalog("c1");
- DataMap cayenneMap = new DataMapConverter(new JpaLoaderContext())
- .toDataMap("n1", jpaMap);
+ DataMap cayenneMap = new DataMapConverter().toDataMap("n1", new JpaLoaderContext(
+ jpaMap));
assertEquals("n1", cayenneMap.getName());
assertEquals("p1", cayenneMap.getDefaultPackage());
assertEquals("s1", cayenneMap.getDefaultSchema());
@@ -50,15 +50,15 @@
*/
public void testLoadClassMapping() throws Exception {
JpaEntityMap map = new JpaEntityMap();
- JpaLoaderContext context = new JpaLoaderContext();
+ JpaLoaderContext context = new JpaLoaderContext(map);
EntityMapAnnotationLoader loader = new EntityMapAnnotationLoader(context);
- loader.loadClassMapping(map, MockCayenneEntity1.class);
- loader.loadClassMapping(map, MockCayenneEntity2.class);
- loader.loadClassMapping(map, MockCayenneTargetEntity1.class);
- loader.loadClassMapping(map, MockCayenneTargetEntity2.class);
+ loader.loadClassMapping(MockCayenneEntity1.class);
+ loader.loadClassMapping(MockCayenneEntity2.class);
+ loader.loadClassMapping(MockCayenneTargetEntity1.class);
+ loader.loadClassMapping(MockCayenneTargetEntity2.class);
- loader.loadClassMapping(map, MockCayenneEntityMap1.class);
+ loader.loadClassMapping(MockCayenneEntityMap1.class);
// apply defaults before conversion
new EntityMapDefaultsProcessor(context).applyDefaults(map);
@@ -67,7 +67,7 @@
.getConflicts()
.hasFailures());
- DataMap dataMap = new DataMapConverter(context).toDataMap("n1", map);
+ DataMap dataMap = new DataMapConverter().toDataMap("n1", context);
assertFalse("Found DataMap conflicts: " + context.getConflicts(), context
.getConflicts()
.hasFailures());
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/bridge/DataMapMappingAssertion.java Sun Apr 30 14:54:38 2006
@@ -15,13 +15,17 @@
*/
package org.apache.cayenne.jpa.bridge;
+import java.sql.Types;
import java.util.Iterator;
+import java.util.List;
import junit.framework.Assert;
import org.apache.cayenne.jpa.entity.cayenne.MockCayenneEntity1;
import org.apache.cayenne.jpa.entity.cayenne.MockCayenneEntity2;
+import org.objectstyle.cayenne.dba.TypesMapping;
import org.objectstyle.cayenne.map.DataMap;
+import org.objectstyle.cayenne.map.DbAttribute;
import org.objectstyle.cayenne.map.DbEntity;
import org.objectstyle.cayenne.map.ObjAttribute;
import org.objectstyle.cayenne.map.ObjEntity;
@@ -66,6 +70,17 @@
assertEquals("mock_persistent_1", table.getName());
assertEquals("catalog1", table.getCatalog());
assertEquals("schema1", table.getSchema());
+
+ List pks = table.getPrimaryKey();
+ assertEquals(1, pks.size());
+ DbAttribute pk = (DbAttribute) pks.get(0);
+ assertEquals("id", pk.getName());
+ assertTrue(pk.isPrimaryKey());
+ assertTrue(pk.isMandatory());
+ assertEquals(
+ "Invalid SQL type: " + TypesMapping.getSqlNameByType(pk.getType()),
+ Types.INTEGER,
+ pk.getType());
}
protected void assertObjAttributes(ObjEntity entity1) {
@@ -92,8 +107,9 @@
protected void assertObjRelationships(ObjEntity entity1) {
assertEquals(4, entity1.getRelationshipMap().size());
-
- ObjRelationship attribute5 = (ObjRelationship) entity1.getRelationship("attribute5");
+
+ ObjRelationship attribute5 = (ObjRelationship) entity1
+ .getRelationship("attribute5");
assertNotNull(attribute5);
assertFalse(attribute5.isToMany());
assertEquals("attribute5", attribute5.getDbRelationshipPath());
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoaderTest.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoaderTest.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoaderTest.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/EntityMapAnnotationLoaderTest.java Sun Apr 30 14:54:38 2006
@@ -46,7 +46,7 @@
public void testSortAnnotations() throws Exception {
EntityMapAnnotationLoader loader = new EntityMapAnnotationLoader(
- new JpaLoaderContext());
+ new JpaLoaderContext(new JpaEntityMap()));
Annotation[] a1 = new Annotation[3];
a1[0] = MockAnnotatedBean1.class.getAnnotation(NamedQuery.class);
@@ -66,9 +66,9 @@
*/
public void testAttributeOverride() {
JpaEntityMap map = new JpaEntityMap();
- JpaLoaderContext context = new JpaLoaderContext();
+ JpaLoaderContext context = new JpaLoaderContext(map);
EntityMapAnnotationLoader loader = new EntityMapAnnotationLoader(context);
- loader.loadClassMapping(map, MockAnnotatedBean2.class);
+ loader.loadClassMapping(MockAnnotatedBean2.class);
assertEquals(1, map.getEntities().size());
JpaEntity entity = map.getEntities().iterator().next();
@@ -96,24 +96,24 @@
*/
public void testLoadClassMapping() throws Exception {
JpaEntityMap map = new JpaEntityMap();
- JpaLoaderContext context = new JpaLoaderContext();
+ JpaLoaderContext context = new JpaLoaderContext(map);
EntityMapAnnotationLoader loader = new EntityMapAnnotationLoader(context);
- loader.loadClassMapping(map, MockEntity1.class);
- loader.loadClassMapping(map, MockEntity2.class);
- loader.loadClassMapping(map, MockEntity3.class);
- loader.loadClassMapping(map, MockEntity4.class);
- loader.loadClassMapping(map, MockEntity5.class);
-
- loader.loadClassMapping(map, MockEmbed1.class);
- loader.loadClassMapping(map, MockEmbed2.class);
-
- loader.loadClassMapping(map, MockMappedSuperclass1.class);
- loader.loadClassMapping(map, MockMappedSuperclass2.class);
- loader.loadClassMapping(map, MockMappedSuperclass3.class);
+ loader.loadClassMapping(MockEntity1.class);
+ loader.loadClassMapping(MockEntity2.class);
+ loader.loadClassMapping(MockEntity3.class);
+ loader.loadClassMapping(MockEntity4.class);
+ loader.loadClassMapping(MockEntity5.class);
+
+ loader.loadClassMapping(MockEmbed1.class);
+ loader.loadClassMapping(MockEmbed2.class);
+
+ loader.loadClassMapping(MockMappedSuperclass1.class);
+ loader.loadClassMapping(MockMappedSuperclass2.class);
+ loader.loadClassMapping(MockMappedSuperclass3.class);
- loader.loadClassMapping(map, MockEntityMap1.class);
- loader.loadClassMapping(map, MockEntityMap2.class);
+ loader.loadClassMapping(MockEntityMap1.class);
+ loader.loadClassMapping(MockEntityMap2.class);
assertFalse("Found conflicts: " + context.getConflicts(), context
.getConflicts()
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessorTest.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessorTest.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessorTest.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/EntityMapDefaultsProcessorTest.java Sun Apr 30 14:54:38 2006
@@ -22,6 +22,7 @@
import org.apache.cayenne.jpa.map.JpaAttribute;
import org.apache.cayenne.jpa.map.JpaEntity;
import org.apache.cayenne.jpa.map.JpaEntityMap;
+import org.apache.cayenne.jpa.map.JpaId;
public class EntityMapDefaultsProcessorTest extends TestCase {
@@ -34,10 +35,10 @@
assertFalse(Serializable.class.isAssignableFrom(MockAnnotatedBean3.class));
JpaEntityMap map = new JpaEntityMap();
- context = new JpaLoaderContext();
+ context = new JpaLoaderContext(map);
EntityMapAnnotationLoader loader = new EntityMapAnnotationLoader(context);
- loader.loadClassMapping(map, MockAnnotatedBean1.class);
- loader.loadClassMapping(map, MockAnnotatedBean3.class);
+ loader.loadClassMapping(MockAnnotatedBean1.class);
+ loader.loadClassMapping(MockAnnotatedBean3.class);
// apply defaults
EntityMapDefaultsProcessor defaultsProcessor = new EntityMapDefaultsProcessor(
@@ -90,5 +91,13 @@
assertNotNull(toBean2s2.getOneToMany());
assertNull(toBean2s2.getOneToMany().getTargetEntityName());
+ }
+
+ public void testId() {
+ assertEquals(1, entity.getIds().size());
+ JpaId id = entity.getIds().iterator().next();
+ assertEquals("pk", id.getName());
+ assertNotNull(id.getColumn());
+ assertEquals("pk", id.getColumn().getName());
}
}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/JpaClassDescriptorTest.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/JpaClassDescriptorTest.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/JpaClassDescriptorTest.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/JpaClassDescriptorTest.java Sun Apr 30 14:54:38 2006
@@ -17,6 +17,9 @@
import java.util.regex.Matcher;
+import org.apache.cayenne.jpa.map.AccessType;
+import org.apache.cayenne.jpa.map.JpaEntityMap;
+
import junit.framework.TestCase;
public class JpaClassDescriptorTest extends TestCase {
@@ -46,17 +49,20 @@
assertEquals("This", m3.group(1));
}
- public void testGetPropertyDescriptors() throws Exception {
+ public void testGetMemberDescriptors() throws Exception {
+ JpaEntityMap map = new JpaEntityMap();
+ map.setAccess(AccessType.PROPERTY);
JpaClassDescriptor descriptor = new JpaClassDescriptor(
+ map,
MockPropertyRegressionBean.class);
assertEquals(2, descriptor.getPropertyDescriptors().size());
- assertNotNull(descriptor.getPropertyDescriptor(MockPropertyRegressionBean.class
+ assertNotNull(descriptor.getPropertyForMember(MockPropertyRegressionBean.class
.getDeclaredMethod("getP2", new Class[] {})));
- assertNotNull(descriptor.getPropertyDescriptor(MockPropertyRegressionBean.class
+ assertNotNull(descriptor.getPropertyForMember(MockPropertyRegressionBean.class
.getDeclaredMethod("getP3", new Class[] {})));
}
}
Modified: incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/MockAnnotatedBean3.java
URL: http://svn.apache.org/viewcvs/incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/MockAnnotatedBean3.java?rev=398449&r1=398448&r2=398449&view=diff
==============================================================================
--- incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/MockAnnotatedBean3.java (original)
+++ incubator/cayenne/jpa/trunk/cayenne-jpa/src/test/java/org/apache/cayenne/jpa/conf/MockAnnotatedBean3.java Sun Apr 30 14:54:38 2006
@@ -19,11 +19,15 @@
import javax.persistence.Basic;
import javax.persistence.Entity;
+import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
@Entity
public class MockAnnotatedBean3 {
+
+ @Id
+ protected int pk;
@Basic
protected String attribute1;