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]); } }
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(); }