Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 247226 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java (-33 / +43 lines)
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

Return to bug 247226