Author: aadamchik
Date: Tue Jul 11 13:56:44 2006
New Revision: 420991

URL: http://svn.apache.org/viewvc?rev=420991&view=rev
Log:
CAY-595

Modified:
    
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataNodeSyncQualifierDescriptor.java

Modified: 
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataNodeSyncQualifierDescriptor.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataNodeSyncQualifierDescriptor.java?rev=420991&r1=420990&r2=420991&view=diff
==============================================================================
--- 
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataNodeSyncQualifierDescriptor.java
 (original)
+++ 
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataNodeSyncQualifierDescriptor.java
 Tue Jul 11 13:56:44 2006
@@ -196,19 +196,31 @@
                     while (joinsIterator.hasNext()) {
                         final DbJoin dbAttrPair = (DbJoin) 
joinsIterator.next();
                         DbAttribute dbAttribute = dbAttrPair.getSource();
-                        if (!attributes.contains(dbAttribute)) {
 
-                            attributes.add(dbAttribute);
-                            valueTransformers.add(new Transformer() {
+                        // relationship transformers override attribute 
transformers for
+                        // meaningful FK's... why meanigful FKs can go out of 
sync is
+                        // another story (CAY-595)
+                        int index = attributes.indexOf(dbAttribute);
+                        if (index >= 0 && !dbAttribute.isForeignKey()) {
+                            continue;
+                        }
+
+                        Object transformer = new Transformer() {
 
-                                public Object transform(Object input) {
-                                    ObjectId targetId = ((ObjectDiff) input)
-                                            
.getArcSnapshotValue(relationship.getName());
-                                    return targetId != null ? targetId
-                                            .getIdSnapshot()
-                                            .get(dbAttrPair.getTargetName()) : 
null;
-                                }
-                            });
+                            public Object transform(Object input) {
+                                ObjectId targetId = ((ObjectDiff) input)
+                                        
.getArcSnapshotValue(relationship.getName());
+                                return targetId != null ? 
targetId.getIdSnapshot().get(
+                                        dbAttrPair.getTargetName()) : null;
+                            }
+                        };
+
+                        if (index < 0) {
+                            attributes.add(dbAttribute);
+                            valueTransformers.add(transformer);
+                        }
+                        else {
+                            valueTransformers.set(index, transformer);
                         }
                     }
                 }


Reply via email to