|
Lines 191-196
Link Here
|
| 191 |
|
191 |
|
| 192 |
public void cdoInternalCleanup() |
192 |
public void cdoInternalCleanup() |
| 193 |
{ |
193 |
{ |
|
|
194 |
// clean(); |
| 194 |
} |
195 |
} |
| 195 |
|
196 |
|
| 196 |
@Override |
197 |
@Override |
|
Lines 306-319
Link Here
|
| 306 |
instance.eSetDeliver(true); |
307 |
instance.eSetDeliver(true); |
| 307 |
} |
308 |
} |
| 308 |
|
309 |
|
| 309 |
int newThreadCount = counter.decrement(); |
310 |
counter.decrement(); |
| 310 |
|
311 |
unregister(this); |
| 311 |
if (newThreadCount == 0 && getPreRegisteredObjects() != null) |
|
|
| 312 |
{ |
| 313 |
// localThread.remove(); // TODO Martin: check why new |
| 314 |
// objects will be created if this list is cleared |
| 315 |
} |
| 316 |
|
| 317 |
underConstruction = false; |
312 |
underConstruction = false; |
| 318 |
} |
313 |
} |
| 319 |
} |
314 |
} |
|
Lines 327-332
Link Here
|
| 327 |
getPreRegisteredObjects().put(wrapper.cdoID(), wrapper); |
322 |
getPreRegisteredObjects().put(wrapper.cdoID(), wrapper); |
| 328 |
} |
323 |
} |
| 329 |
|
324 |
|
|
|
325 |
private void unregister(CDOLegacyWrapper wrapper) |
| 326 |
{ |
| 327 |
getPreRegisteredObjects().remove(wrapper.cdoID()); |
| 328 |
} |
| 329 |
|
| 330 |
protected void revisionToInstanceContainment() |
330 |
protected void revisionToInstanceContainment() |
| 331 |
{ |
331 |
{ |
| 332 |
CDOID resourceID = revision.getResourceID(); |
332 |
CDOID resourceID = revision.getResourceID(); |
|
Lines 338-344
Link Here
|
| 338 |
setInstanceContainer(container, revision.getContainingFeatureID()); |
338 |
setInstanceContainer(container, revision.getContainingFeatureID()); |
| 339 |
} |
339 |
} |
| 340 |
|
340 |
|
| 341 |
private Map<CDOID, EObject> getPreRegisteredObjects() |
341 |
/** |
|
|
342 |
* @since 3.0 |
| 343 |
*/ |
| 344 |
public static Map<CDOID, EObject> getPreRegisteredObjects() |
| 342 |
{ |
345 |
{ |
| 343 |
return preRegisteredObjects.get(); |
346 |
return preRegisteredObjects.get(); |
| 344 |
} |
347 |
} |
|
Lines 370-376
Link Here
|
| 370 |
|
373 |
|
| 371 |
if (TRACER.isEnabled()) |
374 |
if (TRACER.isEnabled()) |
| 372 |
{ |
375 |
{ |
| 373 |
TRACER.format(("Adding " + object + " to feature " + feature + "in instance " + instance)); |
376 |
TRACER.format("Adding " + object + " to feature " + feature + "in instance " + instance); |
| 374 |
} |
377 |
} |
| 375 |
|
378 |
|
| 376 |
list.basicAdd(object, null); |
379 |
list.basicAdd(object, null); |
|
Lines 400-424
Link Here
|
| 400 |
|
403 |
|
| 401 |
int featureID = instance.eClass().getFeatureID(feature); |
404 |
int featureID = instance.eClass().getFeatureID(feature); |
| 402 |
Class<? extends Object> baseClass = object == null ? null : object.getClass(); |
405 |
Class<? extends Object> baseClass = object == null ? null : object.getClass(); |
|
|
406 |
EStructuralFeature.Internal internalFeature = (EStructuralFeature.Internal)feature; |
| 407 |
EReference oppositeReference = cdoID().isTemporary() ? null : internalFeature.getEOpposite(); |
| 403 |
|
408 |
|
| 404 |
try |
409 |
if (oppositeReference != null) |
| 405 |
{ |
410 |
{ |
| 406 |
instance.eInverseAdd((InternalEObject)object, featureID, baseClass, null); |
411 |
instance.eInverseAdd((InternalEObject)object, featureID, baseClass, null); |
|
|
412 |
|
| 413 |
if (object != null && !EMFUtil.isPersistent(oppositeReference)) |
| 414 |
{ |
| 415 |
adjustOppositeReference(instance, (InternalEObject)object, oppositeReference); |
| 416 |
} |
| 407 |
} |
417 |
} |
| 408 |
catch (NullPointerException e) |
418 |
else |
| 409 |
{ |
419 |
{ |
| 410 |
// TODO: Martin:quick hack, because there is still a problem with the feature id. Should investigate this soon |
|
|
| 411 |
instance.eSet(feature, object); |
420 |
instance.eSet(feature, object); |
| 412 |
} |
421 |
} |
| 413 |
|
422 |
|
| 414 |
// Adjust opposite for transient opposite features |
423 |
// Adjust opposite for transient opposite features |
| 415 |
EStructuralFeature.Internal internalFeature = (EStructuralFeature.Internal)feature; |
|
|
| 416 |
EReference oppositeReference = cdoID().isTemporary() ? null : internalFeature.getEOpposite(); |
| 417 |
if (oppositeReference != null && object != null && !EMFUtil.isPersistent(oppositeReference)) |
| 418 |
{ |
| 419 |
adjustOppositeReference(instance, (InternalEObject)object, oppositeReference); |
| 420 |
} |
| 421 |
|
| 422 |
if (TRACER.isEnabled()) |
424 |
if (TRACER.isEnabled()) |
| 423 |
{ |
425 |
{ |
| 424 |
TRACER.format(("Added object " + object + " to feature " + feature + " in instance " + instance)); |
426 |
TRACER.format(("Added object " + object + " to feature " + feature + " in instance " + instance)); |
|
Lines 494-520
Link Here
|
| 494 |
return null; |
496 |
return null; |
| 495 |
} |
497 |
} |
| 496 |
|
498 |
|
|
|
499 |
if (object instanceof CDOLegacyWrapper) |
| 500 |
{ |
| 501 |
return ((CDOLegacyWrapper)object).cdoInternalInstance(); |
| 502 |
} |
| 503 |
|
| 497 |
CDOType type = CDOModelUtil.getType(feature.getEType()); |
504 |
CDOType type = CDOModelUtil.getType(feature.getEType()); |
| 498 |
object = type.convertToEMF(feature.getEType(), object); |
505 |
object = type.convertToEMF(feature.getEType(), object); |
| 499 |
|
506 |
|
| 500 |
if (type == CDOType.OBJECT) |
507 |
if (type == CDOType.OBJECT) |
| 501 |
{ |
508 |
{ |
| 502 |
CDOID id = (CDOID)object; |
509 |
if (object instanceof CDOID) |
| 503 |
if (id.isNull()) |
|
|
| 504 |
{ |
510 |
{ |
| 505 |
return null; |
511 |
CDOID id = (CDOID)object; |
| 506 |
} |
512 |
if (id.isNull()) |
|
|
513 |
{ |
| 514 |
return null; |
| 515 |
} |
| 507 |
|
516 |
|
| 508 |
object = getPreRegisteredObjects().get(id); |
517 |
object = getPreRegisteredObjects().get(id); |
| 509 |
if (object != null) |
518 |
if (object != null) |
| 510 |
{ |
519 |
{ |
| 511 |
return ((CDOLegacyWrapper)object).cdoInternalInstance(); |
520 |
return ((CDOLegacyWrapper)object).cdoInternalInstance(); |
| 512 |
} |
521 |
} |
| 513 |
|
522 |
|
| 514 |
object = view.getObject(id); |
523 |
object = view.getObject(id); |
| 515 |
if (object instanceof CDOObjectWrapper) |
524 |
if (object instanceof CDOObjectWrapper) |
| 516 |
{ |
525 |
{ |
| 517 |
return ((CDOObjectWrapper)object).cdoInternalInstance(); |
526 |
return ((CDOObjectWrapper)object).cdoInternalInstance(); |
|
|
527 |
} |
| 518 |
} |
528 |
} |
| 519 |
} |
529 |
} |
| 520 |
|
530 |
|