@Requires(IRepositoryConfig.CAPABILITY_BRANCHING) public void testTargetGoalDeltaVersion() throws Exception { skipStoreWithoutChangeSets(); // setup 2 transactions. final CDOSession session1 = openSession(); final CDOTransaction s1Tr1 = session1.openTransaction(); s1Tr1.options().addChangeSubscriptionPolicy(CDOAdapterPolicy.ALL); final CDOTransaction s1Tr2 = session1.openTransaction(); s1Tr2.options().addChangeSubscriptionPolicy(CDOAdapterPolicy.ALL); // create resource, container and 2 elements using transaction 1. final CDOResource resource = s1Tr1.createResource(getResourcePath("/test1")); RefMultiContained container = getModel4Factory().createRefMultiContained(); resource.getContents().add(container); MultiContainedElement element1 = getModel4Factory().createMultiContainedElement(); container.getElements().add(element1); MultiContainedElement element2 = getModel4Factory().createMultiContainedElement(); container.getElements().add(element2); commitAndSync(s1Tr1, s1Tr2); // access container on transaction 2 to have it updated with a RevisionDelta. RefMultiContained container2 = s1Tr2.getObject(container); // setup another branch. final CDOBranch otherBranch = s1Tr1.getBranch().createBranch("other"); final CDOTransaction s1Tr3 = session1.openTransaction(otherBranch); RefMultiContained otherContainer = s1Tr3.getObject(container); assertNotSame(null, otherContainer); assertEquals(true, otherContainer.getElements().size() > 0); // remove an element on the other branch. otherContainer.getElements().remove(0); commitAndSync(s1Tr3, s1Tr1); // merge the other branch to main (this creates the targetGoalDelta for the RevisionDelta). s1Tr1.merge(s1Tr3.getBranch().getHead(), new DefaultCDOMerger.PerFeature.ManyValued()); commitAndSync(s1Tr1, s1Tr2); // check the change on tr2 and do another change. assertEquals(false, s1Tr1.isDirty()); container2.getElements().remove(0); commitAndSync(s1Tr2, s1Tr1); // <--- this commit will throw the following exception: // java.util.ConcurrentModificationException: // Attempt by Transaction[2:2] to modify historical revision: RefMultiContained@OID4:0v1 assertEquals(false, s1Tr1.isDirty()); // check revision versions. assertEquals( CDOUtil.getCDOObject(container).cdoRevision().getVersion(), CDOUtil.getCDOObject(container2).cdoRevision().getVersion()); }
public void testDeleteExistingObject() throws Exception { { msg("Open session & local transaction"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction); file = pushTransaction.getFile(); CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath)); msg("Remove an existing element"); Supplier supplier = (Supplier) resource.getContents().get(0); resource.getContents().remove(supplier); msg("Commit"); pushTransaction.commit(); session.close(); } { msg("Reload previous local session"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction, file); assertEquals(true, transaction.isDirty()); assertEquals(1, transaction.getRevisionDeltas().size()); push(transaction, pushTransaction); session.close(); } CDOSession session = openSession(); CDOView view = session.openView(); CDOResource resource = view.getResource(getResourcePath(resourcePath)); assertEquals(1, resource.getContents().size()); }
@Requires(IRepositoryConfig.CAPABILITY_BRANCHING) public void testXRefMergeManyValueTest() throws Exception { // setup transaction. final CDOSession session = openSession(); final CDOTransaction tr1 = session.openTransaction(); tr1.options().addChangeSubscriptionPolicy(CDOAdapterPolicy.ALL); final CDOResource resource = tr1.createResource(getResourcePath("/test1")); RefMultiContained container = getModel4Factory().createRefMultiContained(); resource.getContents().add(container); tr1.commit(); sleep(1000); final CDOBranch otherBranch = tr1.getBranch().createBranch("other"); final CDOTransaction tr2 = session.openTransaction(otherBranch); RefMultiContained otherContainer = tr2.getObject(container); assertNotNull(otherContainer); // add a new element on other branch at index 0. otherContainer.getElements().add(0, getModel4Factory().createMultiContainedElement()); tr2.commit(); // sleep to have the merger see the changes. sleep(1000); // merge the other branch to main. tr1.merge(tr2.getBranch().getHead(), new DefaultCDOMerger.PerFeature.ManyValued()); tr1.commit(); assertEquals(false, tr1.isDirty()); }
public void testUnsetValue() throws Exception { { msg("Open session & local transaction"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction); file = pushTransaction.getFile(); CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath)); Supplier supplier = (Supplier) resource.getContents().get(0); supplier.setName(null); msg("Commit"); pushTransaction.commit(); session.close(); } { msg("Reload previous local session"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction, file); assertEquals(true, transaction.isDirty()); CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath)); Supplier supplier = (Supplier) resource.getContents().get(0); assertNull(supplier.getName()); push(transaction, pushTransaction); session.close(); } CDOSession session = openSession(); CDOView view = session.openView(); CDOResource resource = view.getResource(getResourcePath(resourcePath)); Supplier supplier = (Supplier) resource.getContents().get(0); assertNull(supplier.getName()); }
public void testAddNewObjectInObject() throws Exception { { msg("Open session & local transaction"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction); file = pushTransaction.getFile(); CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath)); msg("Create a new element"); Category category = getModel1Factory().createCategory(); Company company = (Company) resource.getContents().get(1); company.getCategories().add(category); msg("Commit"); pushTransaction.commit(); session.close(); } { msg("Reload previous local session"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction, file); assertEquals(true, transaction.isDirty()); assertEquals(1, transaction.getRevisionDeltas().size()); CDORevisionDelta delta = transaction.getRevisionDeltas().values().iterator().next(); assertNotNull(delta); push(transaction, pushTransaction); session.close(); } CDOSession session = openSession(); CDOView view = session.openView(); CDOResource resource = view.getResource(getResourcePath(resourcePath)); assertEquals(2, resource.getContents().size()); }
public void testAddNewObjectInResource() throws Exception { { msg("Open session & local transaction"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction); file = pushTransaction.getFile(); CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath)); msg("Create a new element"); Supplier supplier = getModel1Factory().createSupplier(); supplier.setName("supplier" + System.currentTimeMillis()); resource.getContents().add(supplier); msg("Commit"); pushTransaction.commit(); session.close(); } { msg("Reload previous local session"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction, file); assertEquals(true, transaction.isDirty()); assertEquals(1, transaction.getRevisionDeltas().size()); CDORevisionDelta delta = transaction.getRevisionDeltas().values().iterator().next(); assertNotNull(delta); push(transaction, pushTransaction); session.close(); } CDOSession session = openSession(); CDOView view = session.openView(); CDOResource resource = view.getResource(getResourcePath(resourcePath)); assertEquals(3, resource.getContents().size()); }
public void testAddNewHierarchy() throws Exception { final String currentSupplierName = "supplier" + System.currentTimeMillis(); final Date orderDate = new Date(); final Float orderDetailPrice = 10.5F; { msg("Open session & local transaction"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction); file = pushTransaction.getFile(); CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath)); msg("Create a new element"); Supplier supplier = getModel1Factory().createSupplier(); supplier.setName(currentSupplierName); resource.getContents().add(supplier); msg("Create a new child"); PurchaseOrder order = getModel1Factory().createPurchaseOrder(); order.setDate(orderDate); supplier.getPurchaseOrders().add(order); resource.getContents().add(order); OrderDetail detail = getModel1Factory().createOrderDetail(); detail.setPrice(orderDetailPrice); order.getOrderDetails().add(detail); msg("Commit"); pushTransaction.commit(); session.close(); } { msg("Reload previous local session"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction, file); assertEquals(true, transaction.isDirty()); assertEquals(1, transaction.getRevisionDeltas().size()); CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath)); assertEquals(4, resource.getContents().size()); push(transaction, pushTransaction); session.close(); } CDOSession session = openSession(); CDOView view = session.openView(); CDOResource resource = view.getResource(getResourcePath(resourcePath)); assertEquals(4, resource.getContents().size()); Supplier supplier = (Supplier) resource.getContents().get(2); assertEquals(currentSupplierName, supplier.getName()); assertEquals(1, supplier.getPurchaseOrders().size()); PurchaseOrder order = supplier.getPurchaseOrders().get(0); assertNotNull(order); assertEquals(orderDate, order.getDate()); assertEquals(1, order.getOrderDetails().size()); OrderDetail detail = order.getOrderDetails().get(0); assertNotNull(detail); assertEquals(orderDetailPrice, detail.getPrice()); }
public void testMoveObject() throws Exception { { msg("Open session & local transaction"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction); file = pushTransaction.getFile(); CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath)); msg("Create a new elements"); Supplier supplier2 = getModel1Factory().createSupplier(); supplier2.setName("supplier" + System.currentTimeMillis()); resource.getContents().add(supplier2); msg("Move first supplier"); Supplier supplier1 = (Supplier) resource.getContents().get(0); resource.getContents().move(1, supplier1); assertEquals(supplierName, ((Supplier) resource.getContents().get(1)).getName()); msg("Commit"); pushTransaction.commit(); session.close(); } { msg("Reload previous local session"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction, file); assertEquals(true, transaction.isDirty()); CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath)); assertEquals(supplierName, ((Supplier) resource.getContents().get(1)).getName()); push(transaction, pushTransaction); session.close(); } CDOSession session = openSession(); CDOView view = session.openView(); CDOResource resource = view.getResource(getResourcePath(resourcePath)); assertEquals(supplierName, ((Supplier) resource.getContents().get(1)).getName()); }
public void testUpdateExistingObject() throws Exception { String newName = "supplier" + System.currentTimeMillis(); { msg("Open session & local transaction"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction); file = pushTransaction.getFile(); CDOResource resource = transaction.getOrCreateResource(getResourcePath(resourcePath)); msg("Make a diff in existing element"); Supplier supplier = (Supplier) resource.getContents().get(0); supplier.setName(newName); msg("Commit"); pushTransaction.commit(); session.close(); } { msg("Reload previous local session"); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); CDOPushTransaction pushTransaction = openPushTransaction(transaction, file); assertEquals(true, transaction.isDirty()); assertEquals(1, transaction.getRevisionDeltas().size()); push(transaction, pushTransaction); session.close(); } CDOSession session = openSession(); CDOView view = session.openView(); CDOResource resource = view.getResource(getResourcePath(resourcePath)); assertEquals(2, resource.getContents().size()); Supplier supplier = (Supplier) resource.getContents().get(0); assertNotNull(supplier); assertEquals(newName, supplier.getName()); }
protected void push(CDOTransaction transaction, CDOPushTransaction pushTransaction) throws CommitException { msg("Publish previous modifications"); pushTransaction.push(); assertEquals(false, transaction.isDirty()); }