/**
* Copyright (c) 2008 IBM Corporation 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:
* Florian Thienel <florian@thienel.org>
*/
package org.eclipse.emf.test.core.dynamic;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
import org.junit.Test;
public class DynamicCrossResourceContainmentProxy
{
@Test
public void testDynamicGet() throws Exception
{
EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
ePackage.setNsURI("nsuri");
EClass eClass = EcoreFactory.eINSTANCE.createEClass();
eClass.setName("TestClass");
ePackage.getEClassifiers().add(eClass);
EReference eReference = EcoreFactory.eINSTANCE.createEReference();
eClass.getEStructuralFeatures().add(eReference);
eReference.setName("child");
eReference.setEType(eClass);
eReference.setContainment(true);
eReference.setResolveProxies(true);
EObject parent = ePackage.getEFactoryInstance().create(eClass);
EObject child = ePackage.getEFactoryInstance().create(eClass);
parent.eSet(eReference, child);
assertEquals(child, parent.eGet(eClass.getEStructuralFeature("child")));
URI parentURI = URI.createURI("_parent.xml", true);
URI childURI = URI.createURI("_child.xml", true);
ResourceSet outResourceSet = new ResourceSetImpl();
outResourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put
(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMLResourceFactoryImpl());
Resource outParentResource = outResourceSet.createResource(parentURI);
outParentResource.getContents().add(parent);
Resource outChildResource = outResourceSet .createResource(childURI);
outChildResource.getContents().add(child);
ByteArrayOutputStream outParent = new ByteArrayOutputStream();
outParentResource.save(outParent, null);
ByteArrayOutputStream outChild = new ByteArrayOutputStream();
outChildResource.save(outChild, null);
ResourceSet inResourceSet = new ResourceSetImpl();
inResourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put
(Resource.Factory.Registry.DEFAULT_EXTENSION, new XMLResourceFactoryImpl());
inResourceSet.getPackageRegistry().put(ePackage.getNsURI(), ePackage);
Resource inParentResource = inResourceSet.createResource(parentURI);
inParentResource.load(new ByteArrayInputStream(outParent.toByteArray()), null);
Resource inChildResource = inResourceSet.createResource(childURI);
inChildResource.load(new ByteArrayInputStream(outChild.toByteArray()), null);
EObject inParent = inParentResource.getContents().get(0);
assertNotNull(inParent.eGet(eReference));
assertNotNull(inParent.eGet(eReference));
}
}