|
Lines 235-244
Link Here
|
| 235 |
return Collections.unmodifiableMap(getDirtyObjects()); |
235 |
return Collections.unmodifiableMap(getDirtyObjects()); |
| 236 |
} |
236 |
} |
| 237 |
|
237 |
|
| 238 |
MultiMap.ListBased<CDOID, CDOObject> dirtyObjects = new MultiMap.ListBased<CDOID, CDOObject>(); |
238 |
Map<CDOID, CDOObject> allDirtyObjects = new HashMap<CDOID, CDOObject>(); |
| 239 |
for (InternalCDOSavepoint savepoint = this; savepoint != null; savepoint = savepoint.getPreviousSavepoint()) |
239 |
for (InternalCDOSavepoint savepoint = getFirstSavePoint(); savepoint != null; savepoint = savepoint |
|
|
240 |
.getNextSavepoint()) |
| 240 |
{ |
241 |
{ |
| 241 |
dirtyObjects.getDelegates().add(savepoint.getDirtyObjects()); |
242 |
allDirtyObjects.putAll(savepoint.getDirtyObjects()); |
|
|
243 |
for (CDOID removedID : savepoint.getDetachedObjects().keySet()) |
| 244 |
{ |
| 245 |
allDirtyObjects.remove(removedID); |
| 246 |
} |
| 242 |
} |
247 |
} |
| 243 |
|
248 |
|
| 244 |
return dirtyObjects; |
249 |
return dirtyObjects; |
|
Lines 374-401
Link Here
|
| 374 |
} |
379 |
} |
| 375 |
} |
380 |
} |
| 376 |
|
381 |
|
| 377 |
public boolean isNewObject(CDOID id) |
|
|
| 378 |
{ |
| 379 |
if (id.isTemporary()) |
| 380 |
{ |
| 381 |
return true; |
| 382 |
} |
| 383 |
|
| 384 |
synchronized (transaction) |
| 385 |
{ |
| 386 |
for (InternalCDOSavepoint savepoint = this; savepoint != null; savepoint = savepoint.getPreviousSavepoint()) |
| 387 |
{ |
| 388 |
if (savepoint.getNewObjects().containsKey(id)) |
| 389 |
{ |
| 390 |
return true; |
| 391 |
} |
| 392 |
} |
| 393 |
} |
| 394 |
|
| 395 |
return false; |
| 396 |
} |
| 397 |
|
| 398 |
// TODO Not sure if this new implementation is needed. The existing one passes all tests. |
| 399 |
// public boolean isNewObject(CDOID id) |
382 |
// public boolean isNewObject(CDOID id) |
| 400 |
// { |
383 |
// { |
| 401 |
// if (id.isTemporary()) |
384 |
// if (id.isTemporary()) |
|
Lines 403-435
Link Here
|
| 403 |
// return true; |
386 |
// return true; |
| 404 |
// } |
387 |
// } |
| 405 |
// |
388 |
// |
| 406 |
// boolean isNew = false; |
|
|
| 407 |
// boolean wasNew = false; |
| 408 |
// synchronized (transaction) |
389 |
// synchronized (transaction) |
| 409 |
// { |
390 |
// { |
| 410 |
// for (InternalCDOSavepoint savepoint = this; savepoint != null; savepoint = savepoint.getPreviousSavepoint()) |
391 |
// for (InternalCDOSavepoint savepoint = this; savepoint != null; savepoint = savepoint.getPreviousSavepoint()) |
| 411 |
// { |
392 |
// { |
| 412 |
// if (savepoint.getNewObjects().containsKey(id)) |
393 |
// if (savepoint.getNewObjects().containsKey(id)) |
| 413 |
// { |
394 |
// { |
| 414 |
// isNew = true; |
395 |
// return true; |
| 415 |
// wasNew = true; |
|
|
| 416 |
// } |
| 417 |
// |
| 418 |
// if (isNew && savepoint.getDetachedObjects().containsKey(id)) |
| 419 |
// { |
| 420 |
// isNew = false; |
| 421 |
// } |
| 422 |
// |
| 423 |
// if (!isNew && wasNew && savepoint.getReattachedObjects().containsKey(id)) |
| 424 |
// { |
| 425 |
// isNew = true; |
| 426 |
// } |
396 |
// } |
| 427 |
// } |
397 |
// } |
| 428 |
// } |
398 |
// } |
| 429 |
// |
399 |
// |
| 430 |
// return isNew; |
400 |
// return false; |
| 431 |
// } |
401 |
// } |
| 432 |
|
402 |
|
|
|
403 |
// TODO Not sure if this new implementation is needed. The existing one passes all tests. |
| 404 |
public boolean isNewObject(CDOID id) |
| 405 |
{ |
| 406 |
if (id.isTemporary()) |
| 407 |
{ |
| 408 |
return true; |
| 409 |
} |
| 410 |
|
| 411 |
boolean isNew = false; |
| 412 |
boolean wasNew = false; |
| 413 |
synchronized (transaction) |
| 414 |
{ |
| 415 |
for (InternalCDOSavepoint savepoint = this; savepoint != null; savepoint = savepoint.getPreviousSavepoint()) |
| 416 |
{ |
| 417 |
if (savepoint.getNewObjects().containsKey(id)) |
| 418 |
{ |
| 419 |
isNew = true; |
| 420 |
wasNew = true; |
| 421 |
} |
| 422 |
|
| 423 |
if (isNew && savepoint.getDetachedObjects().containsKey(id)) |
| 424 |
{ |
| 425 |
isNew = false; |
| 426 |
} |
| 427 |
|
| 428 |
if (!isNew && wasNew && savepoint.getReattachedObjects().containsKey(id)) |
| 429 |
{ |
| 430 |
isNew = true; |
| 431 |
} |
| 432 |
} |
| 433 |
} |
| 434 |
|
| 435 |
return isNew; |
| 436 |
} |
| 437 |
|
| 433 |
public void rollback() |
438 |
public void rollback() |
| 434 |
{ |
439 |
{ |
| 435 |
synchronized (transaction) |
440 |
synchronized (transaction) |