예제 #1
0
  public void test() throws CommitException {
    {
      CDOSession session = openSession();
      CDOTransaction transaction = session.openTransaction();
      CDOResource resource = transaction.createResource(getResourcePath("test"));

      Category category1 = getModel1Factory().createCategory();
      resource.getContents().add(category1);

      category1.getCategories().add(getModel1Factory().createCategory());

      Category category2 = getModel1Factory().createCategory();
      resource.getContents().add(category2);

      transaction.commit();
      session.close();
    }

    {
      CDOSession session = openSession();
      CDOTransaction transaction = session.openTransaction();

      final CDOObject[] attachedObject = new CDOObject[1];
      transaction.addTransactionHandler(
          new CDOTransactionHandler1() {
            public void modifyingObject(
                CDOTransaction transaction, CDOObject object, CDOFeatureDelta featureDelta) {}

            public void detachingObject(CDOTransaction transaction, CDOObject object) {}

            public void attachingObject(CDOTransaction transaction, CDOObject object) {
              attachedObject[0] = object;
            }
          });

      CDOResource resource = transaction.getResource(getResourcePath("test"));
      Category c1 = (Category) resource.getContents().get(0);
      Category nestedCategory = c1.getCategories().get(0);
      CDOObject cdoCategory = CDOUtil.getCDOObject(nestedCategory);

      // Detach
      EcoreUtil.remove(nestedCategory);

      // Re-attach
      attachedObject[0] = null;
      ((Category) resource.getContents().get(1)).getCategories().add(nestedCategory);

      assertNotNull("CDOTransactionHandler1.attachingObject was not called", attachedObject[0]);
      assertEquals(
          MessageFormat.format("Re-attached object was not the expected object {0}", cdoCategory),
          cdoCategory,
          attachedObject[0]);
    }
  }
예제 #2
0
  public void testDirectResource() throws Exception {
    CDOSession session = openSession();
    CDOTransaction transaction = session.openTransaction();

    CDOResource resource1 = transaction.getOrCreateResource(getResourcePath("/test1"));
    // Resource resource1 = new XMIResourceImpl();

    Category cat1 = getModel1Factory().createCategory();
    assertTransient(cat1);

    Category cat2 = getModel1Factory().createCategory();
    assertTransient(cat2);

    // resource1.getContents().add(cat2);
    resource1.getContents().add(cat1);
    cat1.getCategories().add(cat2);

    assertEquals(null, CDOUtil.getCDOObject(cat2).cdoDirectResource());
    assertEquals(resource1, CDOUtil.getCDOObject(cat1).cdoDirectResource());
    assertEquals(null, ((InternalEObject) cat2).eDirectResource());
    assertEquals(resource1, ((InternalEObject) cat1).eDirectResource());

    transaction.close();
    session.close();
  }