blob: f468e2591b9aa95c3019444b456677868c54113a [file] [log] [blame]
/*
* Copyright (c) 2012, 2015, 2016, 2020 Eike Stepper (Loehne, 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();
URI localURI = createLocalAndRemoteResource();
accessRemoteObjectByLocalReferences(localURI);
}
private URI createLocalAndRemoteResource() throws Exception
{
ResourceSet resourceSet = createResourceSet();
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(getName(), ".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 = createResourceSet();
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);
}
private static ResourceSet createResourceSet()
{
ResourceSet resourceSet = new ResourceSetImpl();
Registry registry = resourceSet.getResourceFactoryRegistry();
registry.getProtocolToFactoryMap().put(CDONet4jUtil.PROTOCOL_TCP, CDOResourceFactory.INSTANCE);
registry.getExtensionToFactoryMap().put("model1", new XMIResourceFactoryImpl());
return resourceSet;
}
}