blob: 1d30677b9b468d8960509f587b93acdc2f2bb77d [file] [log] [blame]
/*
* Copyright (c) 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.tests.bugzilla;
import org.eclipse.emf.cdo.eresource.CDOResource;
import org.eclipse.emf.cdo.eresource.CDOResourceFactory;
import org.eclipse.emf.cdo.net4j.CDONet4jUtil;
import org.eclipse.emf.cdo.tests.AbstractCDOTest;
import org.eclipse.emf.cdo.tests.config.ISessionConfig;
import org.eclipse.emf.cdo.tests.config.impl.ConfigTest.Requires;
import org.eclipse.emf.cdo.tests.config.impl.RepositoryConfig;
import org.eclipse.emf.cdo.tests.model1.Company;
import org.eclipse.emf.cdo.tests.model1.Customer;
import org.eclipse.emf.cdo.tests.model1.PurchaseOrder;
import org.eclipse.emf.cdo.tests.model1.SalesOrder;
import org.eclipse.emf.cdo.tests.model1.Supplier;
import org.eclipse.emf.cdo.util.CDOURIData;
import org.eclipse.emf.common.util.URI;
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 org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl;
import java.util.Collections;
/**
* @author Eike Stepper
*/
@Requires(ISessionConfig.CAPABILITY_NET4J_TCP)
public class Bugzilla_329786_Test extends AbstractCDOTest
{
public void testConnectionAwareURI() throws Exception
{
getRepository();
Registry registry = Resource.Factory.Registry.INSTANCE;
registry.getProtocolToFactoryMap().put(CDONet4jUtil.PROTOCOL_TCP, CDOResourceFactory.INSTANCE);
registry.getExtensionToFactoryMap().put("model1", new XMIResourceFactoryImpl());
try
{
URI localURI = createLocalAndRemoteResource();
accessRemoteObjectByLocalReferences(localURI);
}
finally
{
registry.getProtocolToFactoryMap().remove(CDONet4jUtil.PROTOCOL_TCP);
registry.getExtensionToFactoryMap().remove("model1");
}
}
private URI createLocalAndRemoteResource() throws Exception
{
ResourceSet resourceSet = new ResourceSetImpl();
URI sharedURI = URI.createURI(CDONet4jUtil.PROTOCOL_TCP + "://localhost:2036/" + RepositoryConfig.REPOSITORY_NAME
+ getResourcePath("/sharedResource")).appendQuery(CDOURIData.TRANSACTIONAL_PARAMETER + "=true");
Resource sharedResource = resourceSet.createResource(sharedURI);
URI localURI = URI.createFileURI(createTempFile("resource", ".model1").getCanonicalPath());
Resource localResource = resourceSet.createResource(localURI);
Company localCompany = getModel1Factory().createCompany();
localCompany.setName("localCompany");
Company sharedCompany = getModel1Factory().createCompany();
sharedCompany.setName("sharedCompany");
Customer localCustomer = getModel1Factory().createCustomer();
localCustomer.setName("localCustomer");
Customer sharedCustomer = getModel1Factory().createCustomer();
sharedCustomer.setName("sharedCustomer");
Supplier localSupplier = getModel1Factory().createSupplier();
localSupplier.setName("localSupplier");
Supplier sharedSupplier = getModel1Factory().createSupplier();
sharedSupplier.setName("sharedSupplier");
SalesOrder sharedSalesOrder = getModel1Factory().createSalesOrder();
SalesOrder localSalesOrder = getModel1Factory().createSalesOrder();
PurchaseOrder sharedPurchaseOrder = getModel1Factory().createPurchaseOrder();
PurchaseOrder localPurchaseOrder = getModel1Factory().createPurchaseOrder();
sharedResource.getContents().add(sharedCompany);
sharedCompany.getCustomers().add(sharedCustomer);
sharedCompany.getSuppliers().add(sharedSupplier);
sharedCompany.getSalesOrders().add(sharedSalesOrder);
sharedCompany.getPurchaseOrders().add(sharedPurchaseOrder);
localResource.getContents().add(localCompany);
localCompany.getCustomers().add(localCustomer);
localCompany.getSuppliers().add(localSupplier);
localCompany.getSalesOrders().add(localSalesOrder);
localCompany.getPurchaseOrders().add(localPurchaseOrder);
localCustomer.getSalesOrders().add(sharedSalesOrder);
localSupplier.getPurchaseOrders().add(sharedPurchaseOrder);
sharedCustomer.getSalesOrders().add(localSalesOrder);
sharedSupplier.getPurchaseOrders().add(localPurchaseOrder);
sharedResource.save(Collections.emptyMap());
localResource.save(Collections.emptyMap());
return localURI;
}
private void accessRemoteObjectByLocalReferences(URI localURI)
{
ResourceSet resourceSet = new ResourceSetImpl();
Resource localResource = resourceSet.getResource(localURI, true);
assertEquals(true, localResource.getContents().get(0) instanceof Company);
Company localCompany = (Company)localResource.getContents().get(0);
assertEquals("localCompany", localCompany.getName());
Customer localCustomer = localCompany.getCustomers().get(0);
assertEquals(1, localCustomer.getSalesOrders().size());
Supplier localSupplier = localCompany.getSuppliers().get(0);
assertEquals(1, localSupplier.getPurchaseOrders().size());
SalesOrder sharedSalesOrder = localCustomer.getSalesOrders().get(0);
assertEquals(true, sharedSalesOrder.eResource() instanceof CDOResource);
PurchaseOrder sharedPurchaseOrder = localSupplier.getPurchaseOrders().get(0);
assertEquals(true, sharedPurchaseOrder.eResource() instanceof CDOResource);
}
}