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 2007/12/23 17:34:57 UTC
svn commit: r606572 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access:
DataDomainDBDiffBuilder.java DataDomainInsertBucket.java
DataDomainSyncBucket.java
Author: aadamchik
Date: Sun Dec 23 08:34:56 2007
New Revision: 606572
URL: http://svn.apache.org/viewvc?rev=606572&view=rev
Log:
CAY-948 Implement flattened attributes in Cayenne
(generics, also fix for an NPE when inserting entities with flattened attributes)
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainDBDiffBuilder.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainDBDiffBuilder.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainDBDiffBuilder.java?rev=606572&r1=606571&r2=606572&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainDBDiffBuilder.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainDBDiffBuilder.java Sun Dec 23 08:34:56 2007
@@ -27,7 +27,7 @@
import org.apache.cayenne.access.DataDomainSyncBucket.PropagatedValueFactory;
import org.apache.cayenne.graph.GraphChangeHandler;
import org.apache.cayenne.graph.GraphDiff;
-import org.apache.cayenne.map.Attribute;
+import org.apache.cayenne.map.DbAttribute;
import org.apache.cayenne.map.DbEntity;
import org.apache.cayenne.map.DbJoin;
import org.apache.cayenne.map.DbRelationship;
@@ -100,11 +100,12 @@
.getKey()
.toString());
- // this takes care of the flattened attributes, as 'getDbAttributeName'
- // returns the last path component...
- Attribute dbAttribute = dbEntity.getAttribute(attribute
- .getDbAttributeName());
- dbDiff.put(dbAttribute.getName(), entry.getValue());
+ // in case of a flattened attribute, ensure that it belongs to this
+ // bucket...
+ DbAttribute dbAttribute = attribute.getDbAttribute();
+ if (dbAttribute.getEntity() == dbEntity) {
+ dbDiff.put(dbAttribute.getName(), entry.getValue());
+ }
}
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java?rev=606572&r1=606571&r2=606572&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainInsertBucket.java Sun Dec 23 08:34:56 2007
@@ -36,6 +36,7 @@
import org.apache.cayenne.map.ObjAttribute;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.query.InsertBatchQuery;
+import org.apache.cayenne.query.Query;
import org.apache.cayenne.reflect.ClassDescriptor;
/**
@@ -48,23 +49,21 @@
super(parent);
}
- void appendQueriesInternal(Collection queries) {
+ @Override
+ void appendQueriesInternal(Collection<Query> queries) {
DataDomainDBDiffBuilder diffBuilder = new DataDomainDBDiffBuilder();
EntitySorter sorter = parent.getDomain().getEntitySorter();
sorter.sortDbEntities(dbEntities, false);
- Iterator i = dbEntities.iterator();
- while (i.hasNext()) {
- DbEntity dbEntity = (DbEntity) i.next();
- List objEntitiesForDbEntity = (List) descriptorsByDbEntity.get(dbEntity);
+ for (DbEntity dbEntity : dbEntities) {
- InsertBatchQuery batch = new InsertBatchQuery(dbEntity, 27);
+ Collection<ClassDescriptor> objEntitiesForDbEntity = descriptorsByDbEntity
+ .get(dbEntity);
- Iterator j = objEntitiesForDbEntity.iterator();
- while (j.hasNext()) {
- ClassDescriptor descriptor = (ClassDescriptor) j.next();
+ InsertBatchQuery batch = new InsertBatchQuery(dbEntity, 27);
+ for (ClassDescriptor descriptor : objEntitiesForDbEntity) {
diffBuilder.reset(descriptor.getEntity(), dbEntity);
@@ -72,8 +71,8 @@
// remove object set for dependent entity, so that it does not show up
// on post processing
- List objects = (List) (isMasterDbEntity ? objectsByDescriptor
- .get(descriptor) : objectsByDescriptor.remove(descriptor));
+ List<Persistent> objects = isMasterDbEntity ? objectsByDescriptor
+ .get(descriptor) : objectsByDescriptor.remove(descriptor);
if (objects.isEmpty()) {
continue;
@@ -86,11 +85,10 @@
sorter.sortObjectsForEntity(descriptor.getEntity(), objects, false);
}
- for (Iterator k = objects.iterator(); k.hasNext();) {
- Persistent o = (Persistent) k.next();
+ for (Persistent o : objects) {
- Map snapshot = diffBuilder.buildDBDiff(parent.objectDiff(o
- .getObjectId()));
+ Map<Object, Object> snapshot = diffBuilder.buildDBDiff(parent
+ .objectDiff(o.getObjectId()));
batch.add(snapshot, o.getObjectId());
}
@@ -100,9 +98,11 @@
}
}
- void createPermIdsForObjEntity(ClassDescriptor descriptor, List dataObjects) {
+ void createPermIdsForObjEntity(
+ ClassDescriptor descriptor,
+ Collection<Persistent> objects) {
- if (dataObjects.isEmpty()) {
+ if (objects.isEmpty()) {
return;
}
@@ -110,25 +110,21 @@
DbEntity dbEntity = objEntity.getDbEntity();
DataNode node = parent.getDomain().lookupDataNode(dbEntity.getDataMap());
boolean supportsGeneratedKeys = node.getAdapter().supportsGeneratedKeys();
-
- PkGenerator pkGenerator = node.getAdapter().getPkGenerator();
- Iterator i = dataObjects.iterator();
- while (i.hasNext()) {
+ PkGenerator pkGenerator = node.getAdapter().getPkGenerator();
- Persistent object = (Persistent) i.next();
+ for (Persistent object : objects) {
ObjectId id = object.getObjectId();
if (id == null || !id.isTemporary()) {
continue;
}
// modify replacement id directly...
- Map idMap = id.getReplacementIdMap();
+ Map<String, Object> idMap = id.getReplacementIdMap();
boolean autoPkDone = false;
- Iterator it = dbEntity.getPrimaryKeys().iterator();
- while (it.hasNext()) {
- DbAttribute dbAttr = (DbAttribute) it.next();
+
+ for (DbAttribute dbAttr : dbEntity.getPrimaryKeys()) {
String dbAttrName = dbAttr.getName();
if (idMap.containsKey(dbAttrName)) {
@@ -136,7 +132,7 @@
}
// handle meaningful PK
- ObjAttribute objAttr = (ObjAttribute) objEntity.getAttributeForDbAttribute(dbAttr);
+ ObjAttribute objAttr = objEntity.getAttributeForDbAttribute(dbAttr);
if (objAttr != null) {
Object value = descriptor
@@ -144,7 +140,7 @@
.readPropertyDirectly(object);
if (value != null) {
- Class javaClass = objAttr.getJavaClass();
+ Class<?> javaClass = objAttr.getJavaClass();
if (javaClass.isPrimitive()
&& value instanceof Number
&& ((Number) value).intValue() == 0) {
@@ -158,7 +154,7 @@
}
}
}
-
+
// skip db-generated
if (supportsGeneratedKeys && dbAttr.isGenerated()) {
continue;
@@ -168,7 +164,7 @@
if (isPropagated(dbAttr)) {
continue;
}
-
+
// only a single key can be generated from DB... if this is done already
// in this loop, we must bail out.
if (autoPkDone) {
@@ -192,7 +188,7 @@
// TODO, andrus 4/12/2006 - move to DbAttribute in 2.0+
boolean isPropagated(DbAttribute attribute) {
- Iterator it = attribute.getEntity().getRelationships().iterator();
+ Iterator<?> it = attribute.getEntity().getRelationships().iterator();
while (it.hasNext()) {
DbRelationship dbRel = (DbRelationship) it.next();
@@ -200,9 +196,7 @@
continue;
}
- Iterator joins = dbRel.getJoins().iterator();
- while (joins.hasNext()) {
- DbJoin join = (DbJoin) joins.next();
+ for (DbJoin join : dbRel.getJoins()) {
if (attribute.getName().equals(join.getSourceName())) {
return true;
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java?rev=606572&r1=606571&r2=606572&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainSyncBucket.java Sun Dec 23 08:34:56 2007
@@ -53,14 +53,14 @@
*/
abstract class DataDomainSyncBucket {
- final Map<ClassDescriptor, Collection<Object>> objectsByDescriptor;
+ final Map<ClassDescriptor, List<Persistent>> objectsByDescriptor;
final DataDomainFlushAction parent;
List<DbEntity> dbEntities;
Map<DbEntity, Collection<ClassDescriptor>> descriptorsByDbEntity;
DataDomainSyncBucket(DataDomainFlushAction parent) {
- this.objectsByDescriptor = new HashMap<ClassDescriptor, Collection<Object>>();
+ this.objectsByDescriptor = new HashMap<ClassDescriptor, List<Persistent>>();
this.parent = parent;
}
@@ -152,12 +152,12 @@
}
}
- void addDirtyObject(Object object, ClassDescriptor descriptor) {
+ void addDirtyObject(Persistent object, ClassDescriptor descriptor) {
- Collection<Object> objects = objectsByDescriptor.get(descriptor);
+ List<Persistent> objects = objectsByDescriptor.get(descriptor);
if (objects == null) {
- objects = new ArrayList<Object>();
+ objects = new ArrayList<Persistent>();
objectsByDescriptor.put(descriptor, objects);
}