blob: bfee508f63b72a45c06d5933731e51ee4a5a647e [file] [log] [blame]
/*
* Copyright (c) 2009-2012, 2015 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:
* Simon McDuff - initial API and implementation
* Eike Stepper - maintenance
*/
package org.eclipse.emf.cdo.tests.bugzilla;
import org.eclipse.emf.cdo.CDOObject;
import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.eresource.CDOResourceFactory;
import org.eclipse.emf.cdo.eresource.impl.CDOResourceImpl;
import org.eclipse.emf.cdo.session.CDOSession;
import org.eclipse.emf.cdo.tests.AbstractCDOTest;
import org.eclipse.emf.cdo.tests.model1.Company;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.util.CDOURIUtil;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.emf.cdo.view.CDOView;
import org.eclipse.emf.cdo.view.CDOViewProvider;
import org.eclipse.emf.cdo.view.CDOViewProviderRegistry;
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.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.Resource.Factory.Registry;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Attaching adapters to resources does not load them?
* <p>
* See bug 265114
*
* @author Simon McDuff
*/
public class Bugzilla_265114_Test extends AbstractCDOTest
{
@SuppressWarnings("deprecation")
public void testResourceSet() throws Exception
{
{
CDOSession session = openSession();
CDOTransaction transaction = session.openTransaction();
CDOResource resource = transaction.createResource(getResourcePath("/res1"));
Company company = getModel1Factory().createCompany();
resource.getContents().add(company);
transaction.commit();
transaction.close();
session.close();
}
CDOSession session = openSession();
ResourceSet rset = new ResourceSetImpl();
Registry registry = rset.getResourceFactoryRegistry();
Map<String, Object> map = registry.getProtocolToFactoryMap();
map.put(CDOProtocolConstants.PROTOCOL_NAME, CDOResourceFactory.INSTANCE);
CDOViewProvider viewProvider = new CDOViewProviderNewView(session);
CDOViewProviderRegistry.INSTANCE.addViewProvider(viewProvider);
try
{
TransactionEditingDomainSimulatedAdapter adapter = new TransactionEditingDomainSimulatedAdapter();
rset.eAdapters().add(adapter);
URI uriResource1 = CDOURIUtil.createResourceURI(session, getResourcePath("res1"));
Resource resource1 = rset.getResource(uriResource1, true);
CDOObject cdoResource = CDOUtil.getCDOObject((CDOResource)resource1);
assertEquals(rset, cdoResource.cdoView().getResourceSet());
assertEquals(1, adapter.getListOfContent().size());
}
finally
{
CDOViewProviderRegistry.INSTANCE.removeViewProvider(viewProvider);
}
}
/**
* @author Simon McDuff
*/
public static class CDOViewProviderNewView implements CDOViewProvider
{
public static final int PRIORITY = DEFAULT_PRIORITY - 100;
private final CDOSession session;
public CDOViewProviderNewView(CDOSession session)
{
this.session = session;
}
public int getPriority()
{
return PRIORITY;
}
public String getRegex()
{
return null;
}
public CDOView getView(URI uri, ResourceSet resourceSet)
{
return session.openTransaction(resourceSet);
}
public URI getResourceURI(CDOView view, String path)
{
return null;
}
public boolean matchesRegex(URI uri)
{
return true;
}
}
/**
* @author Simon McDuff
*/
public static class TransactionEditingDomainSimulatedAdapter extends AdapterImpl
{
private List<EObject> listOfContent = new ArrayList<EObject>();
@Override
public void notifyChanged(Notification msg)
{
if (msg.getEventType() == Notification.ADD)
{
Object newResource = msg.getNewValue();
if (newResource instanceof CDOResourceImpl)
{
for (EObject object : ((CDOResource)newResource).getContents())
{
listOfContent.add(object);
}
}
}
}
public List<EObject> getListOfContent()
{
return listOfContent;
}
}
}