/* * Copyright (c) 2004 - 2012 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: * Esteban Dugueperoux - initial API and implementation */ package org.eclipse.emf.cdo.tests.bugzilla; import org.eclipse.emf.cdo.CDODeltaNotification; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.tests.AbstractCDOTest; import org.eclipse.emf.cdo.transaction.CDOTransaction; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.impl.AdapterImpl; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; import java.util.Collections; /** * @author Esteban Dugueperoux */ public class Bugzilla_XXXXXX_Test extends AbstractCDOTest { private URI sharedResource1URI; private URI sharedResource2URI; public void testConnectionAwareURI() throws Exception { CDOTransaction cdoTransaction = createLocalAndRemoteResource(); ResourceSet resourceSet = cdoTransaction.getResourceSet(); RemoteUser remoteUser = new RemoteUser(); remoteUser.initRemoteUser(); Resource sharedResource1 = resourceSet.getResource(sharedResource1URI, true); Resource sharedResource2 = resourceSet.getResource(sharedResource2URI, true); // resourceSet.eAdapters().add(new ResourceSetAdapter()); sharedResource1.unload(); resourceSet.getResources().remove(sharedResource1); sharedResource2.save(Collections.emptyMap()); resourceSet.eAdapters().remove(remoteUser); } class RemoteUser extends AdapterImpl { private boolean assertRemoteUserNotified; public void initRemoteUser() { ResourceSet resourceSet = new ResourceSetImpl(); CDOSession session = openSession(); session.openTransaction(resourceSet); resourceSet.getResource(sharedResource1URI, true); resourceSet.getResource(sharedResource2URI, true); resourceSet.eAdapters().add(this); } @Override public void notifyChanged(Notification msg) { if (!assertRemoteUserNotified) { assertRemoteUserNotified = msg instanceof CDODeltaNotification && msg.getOldValue() instanceof CDOResource; } } public boolean assertRemoteUserNotified() { return assertRemoteUserNotified; } } private CDOTransaction createLocalAndRemoteResource() throws Exception { ResourceSet resourceSet = new ResourceSetImpl(); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(resourceSet); Resource sharedResource1 = transaction.createResource(getResourcePath("/sharedResource1")); Resource sharedResource2 = transaction.createResource(getResourcePath("/sharedResource2")); sharedResource1URI = sharedResource1.getURI(); sharedResource2URI = sharedResource2.getURI(); transaction.commit(); return transaction; } }