/* * Copyright (c) 2012, 2013 Eike Stepper (Berlin, Germany) and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Christian W. Damus (CEA) - initial API and implementation */ package org.eclipse.emf.cdo.tests.bugzilla; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.tests.AbstractCDOTest; import org.eclipse.emf.cdo.tests.model6.Holdable; import org.eclipse.emf.cdo.tests.model6.Holder; import org.eclipse.emf.cdo.tests.model6.Thing; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.util.EcoreUtil; /** * Bug 392956: Tests the partial persistence of features. */ public class Bugzilla_392956_Test extends AbstractCDOTest { public void testPartialPersistence() throws Exception { Holder rootHolder = createModel(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); Resource resource = transaction.getOrCreateResource(getResourcePath("model.model7")); resource.getContents().add(rootHolder); transaction.commit(); // Make sure it's a clean retrieval transaction.close(); transaction = session.openTransaction(); resource = transaction.getResource(getResourcePath("model.model7"), true); rootHolder = (Holder)EcoreUtil.getObjectByType(resource.getContents(), getModel6Package().getHolder()); // Only some values returned EList<Holdable> held = rootHolder.getHeld(); assertEquals(2, held.size()); assertThing("A", held.get(0)); assertThing("C", held.get(1)); held = ((Holder)EcoreUtil.getObjectByType(rootHolder.getOwned(), getModel6Package().getHolder())).getHeld(); assertEquals(1, held.size()); assertThing("B", held.get(0)); } private Holder createModel() { Holder result = getModel6Factory().createHolder(); result.setName("root"); Holder nested = getModel6Factory().createHolder(); nested.setName("nested"); Thing a = getModel6Factory().createThing(); a.setName("A"); Thing b = getModel6Factory().createThing(); b.setName("B"); Thing c = getModel6Factory().createThing(); c.setName("C"); result.getOwned().add(a); result.getOwned().add(nested); nested.getOwned().add(b); result.getOwned().add(c); // The partially persisted feature result.getHeld().add(a); result.getHeld().add(b); result.getHeld().add(c); nested.getHeld().add(b); return result; } private void assertThing(String name, Holdable holdable) { assertInstanceOf(Thing.class, holdable); assertEquals(name, holdable.getName()); } }