类org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl源码实例Demo

下面列出了怎么用org.eclipse.emf.ecore.xmi.impl.XMIResourceImpl的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: neoscada   文件: FactoryImpl.java
@Override
protected Entry<ComponentFactory> createService ( final UserInformation userInformation, final String configurationId, final BundleContext context, final Map<String, String> parameters ) throws Exception
{
    final ConfigurationDataHelper cfg = new ConfigurationDataHelper ( parameters );
    final String xml = cfg.getStringNonEmpty ( "configuration" );

    final XMIResource xmi = new XMIResourceImpl ();
    final Map<?, ?> options = new HashMap<Object, Object> ();
    final InputSource is = new InputSource ( new StringReader ( xml ) );
    xmi.load ( is, options );

    final Object c = EcoreUtil.getObjectByType ( xmi.getContents (), ParserPackage.Literals.COMPONENT );
    if ( ! ( c instanceof Component ) )
    {
        throw new RuntimeException ( String.format ( "Configuration did not contain an object of type %s", Component.class.getName () ) );
    }

    final ComponentFactoryWrapper wrapper = new ComponentFactoryWrapper ( this.executor, (Component)c );

    final Dictionary<String, ?> properties = new Hashtable<> ();
    final ServiceRegistration<ComponentFactory> handle = context.registerService ( ComponentFactory.class, wrapper, properties );

    return new Entry<ComponentFactory> ( configurationId, wrapper, handle );
}
 
@Test public void testNestedPackage() throws Exception {
	Resource resource = new XMIResourceImpl();
	EPackage parent = EcoreFactory.eINSTANCE.createEPackage();
	parent.setName("parent");
	parent.setNsURI("http://parent");
	EPackage child = EcoreFactory.eINSTANCE.createEPackage();
	child.setName("child");
	child.setNsURI("http://child");
	EClass eClass = EcoreFactory.eINSTANCE.createEClass();
	eClass.setName("Test");
	child.getEClassifiers().add(eClass);
	parent.getESubpackages().add(child);
	resource.getContents().add(parent);
	Map<QualifiedName, IEObjectDescription> index = createIndex(resource);
	checkEntry(index, parent, false, "parent");
	checkEntry(index, child, false, "parent", "child");
	checkEntry(index, eClass, false, "parent", "child", "Test");
	checkEntry(index, parent, true, "http://parent");
	checkEntry(index, child, true, "http://child");
	checkEntry(index, eClass, true, "http://child", "Test");
	assertEquals(6,index.size());
}
 
@Test public void testMissingMiddleName() {
	Resource resource = new XMIResourceImpl();
	EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
	ePackage.setName("test");
	ePackage.setNsURI("http://test");
	EClass unnamedEClass = EcoreFactory.eINSTANCE.createEClass();
	EAttribute eAttribute = EcoreFactory.eINSTANCE.createEAttribute();
	eAttribute.setName("test");
	unnamedEClass.getEStructuralFeatures().add(eAttribute);
	ePackage.getEClassifiers().add(unnamedEClass);
	resource.getContents().add(ePackage);
	Map<QualifiedName, IEObjectDescription> index = createIndex(resource);
	checkEntry(index, ePackage, false, "test");
	checkEntry(index, ePackage, true, "http://test");
	assertEquals(2,index.size());
	
	unnamedEClass.setName("Test");
	index = createIndex(resource);
	checkEntry(index, ePackage, false, "test");
	checkEntry(index, ePackage, true, "http://test");
	checkEntry(index, unnamedEClass, false, "test", "Test");
	checkEntry(index, unnamedEClass, true, "http://test", "Test");
	checkEntry(index, eAttribute, false, "test", "Test", "test");
	checkEntry(index, eAttribute, true, "http://test", "Test", "test");
	assertEquals(6,index.size());
}
 
源代码4 项目: M2Doc   文件: M2DocTestUtils.java
/**
 * Creates a new {@link DocumentTemplate} with the given {@link DocumentTemplate#getBody() body}. The body is linked to {@link XWPFRun}.
 * 
 * @param body
 *            the {@link Block}
 * @return a new {@link DocumentTemplate}
 */
@SuppressWarnings("resource")
public static DocumentTemplate createDocumentTemplate(Block body) {
    final DocumentTemplate res = TemplatePackage.eINSTANCE.getTemplateFactory().createDocumentTemplate();
    final Resource r = new XMIResourceImpl();
    r.getContents().add(res);

    final XWPFDocument document = new XWPFDocument();
    res.setDocument(document);
    res.setBody(body);

    final XWPFParagraph paragraph = document.createParagraph();

    linkRuns(paragraph, body);

    return res;
}
 
@Test public void testCreateDeltaAndIsAffected() {
	GenericResourceDescriptionManager manager = getEmfResourceDescriptionsManager();
	EClass eClass = EcoreFactory.eINSTANCE.createEClass();
	eClass.setName("Test");
	eClass.getESuperTypes().add(EcorePackage.Literals.EPACKAGE);
	Resource resource = new XMIResourceImpl(URI.createFileURI("test.ecore"));
	resource.getContents().add(eClass);

	EPackage copyOfEPackage = EcoreUtil.copy(EcorePackage.eINSTANCE);
	Resource ecoreResource = new XMIResourceImpl(URI.createURI(copyOfEPackage.getNsURI()));
	ecoreResource.getContents().add(copyOfEPackage);
	
	IResourceDescription oldDescription = new CopiedResourceDescription(manager.getResourceDescription(ecoreResource));
	oldDescription.getExportedObjects();
	copyOfEPackage.setName("ecore_new");
	IResourceDescription newDescription = manager.getResourceDescription(ecoreResource);
	
	Delta delta = manager.createDelta(oldDescription, newDescription);
	assertTrue(delta.haveEObjectDescriptionsChanged());
	
	IResourceDescription referrerDescription = manager.getResourceDescription(resource);
	assertTrue(manager.isAffected(delta, referrerDescription));
}
 
源代码6 项目: statecharts   文件: SCTResourceTest.java
@Test
public void testParsingOnLoad() throws Exception {
	File tmpFile = File.createTempFile("SCTResource", "test.test");
	tmpFile.deleteOnExit();
	URI uri = URI.createFileURI(tmpFile.getPath().toString());
	Resource resource = new XMIResourceImpl(uri);
	Statechart statechart = createStatechart("internal: event Event1");
	resource.getContents().add(statechart);
	Transition transition = createTransition("Event1 [true] / 3 * 3");
	resource.getContents().add(transition);
	resource.save(Collections.EMPTY_MAP);

	res.setURI(uri);
	res.load(Collections.EMPTY_MAP);
	statechart = (Statechart) res.getContents().get(0);
	transition = (Transition) res.getContents().get(1);

	assertEquals("" + res.getErrors(), 0, res.getErrors().size());
	ReactionTrigger trigger = (ReactionTrigger) transition.getTrigger();
	RegularEventSpec eventSpec = (RegularEventSpec) trigger.getTriggers().get(0);
	ElementReferenceExpression expression = (ElementReferenceExpression) eventSpec.getEvent();
	EventDefinition reference = (EventDefinition) expression.getReference();
	assertNotNull(reference);
	assertEquals("Event1", reference.getName());
}
 
源代码7 项目: ArduinoML-kernel   文件: Main.java
private static String xmi2NativeArduino(String xmiPath) throws IOException{
       // register ArduinoML
	ResourceSet resourceSet = new ResourceSetImpl();
    Map<String, Object> packageRegistry = resourceSet.getPackageRegistry();
       packageRegistry.put(arduinoML.ArduinoMLPackage.eNS_URI, arduinoML.ArduinoMLPackage.eINSTANCE);
	
       // load the xmi file
	XMIResource resource = new XMIResourceImpl(URI.createURI("file:"+xmiPath));
	resource.load(null);
	
	// get the root of the model
	App app = (App) resource.getContents().get(0);
	
	// Launch the visitor on the root
	ArduinoMLSwitchPrinter visitor = new ArduinoMLSwitchPrinter();
	return visitor.doSwitch(app);
}
 
源代码8 项目: n4js   文件: UserDataMapper.java
/**
 * <b>ONLY INTENDED FOR TESTS OR DEBUGGING. DON'T USE IN PRODUCTION CODE.</b>
 * <p>
 * Same as {@link #getDeserializedModuleFromDescription(IEObjectDescription, URI)}, but always returns the module as
 * an XMI-serialized string. If no module is found, returns null.
 */
public static String getDeserializedModuleFromDescriptionAsString(IEObjectDescription eObjectDescription,
		URI uri) throws IOException {
	final TModule module = getDeserializedModuleFromDescription(eObjectDescription, uri);
	if (module == null) {
		return null;
	}
	final XMIResource resourceForUserData = new XMIResourceImpl(uri);
	resourceForUserData.getContents().add(module);
	final ByteArrayOutputStream baos = new ByteArrayOutputStream();
	resourceForUserData.save(baos, getOptions(uri, false));
	return baos.toString(TRANSFORMATION_CHARSET_NAME);
}
 
源代码9 项目: n4js   文件: UserDataMapper.java
/**
 * Reads the TModule stored in the given IEObjectDescription.
 */
public static TModule getDeserializedModuleFromDescription(IEObjectDescription eObjectDescription, URI uri) {
	final String serializedData = eObjectDescription.getUserData(USER_DATA_KEY_SERIALIZED_SCRIPT);
	if (Strings.isNullOrEmpty(serializedData)) {
		return null;
	}
	final XMIResource xres = new XMIResourceImpl(uri);
	try {
		final boolean binary = !serializedData.startsWith("<");
		final ByteArrayInputStream bais = new ByteArrayInputStream(
				binary ? Base64.getDecoder().decode(serializedData)
						: serializedData.getBytes(TRANSFORMATION_CHARSET_NAME));
		xres.load(bais, getOptions(uri, binary));
	} catch (Exception e) {
		LOGGER.warn("error deserializing module from IEObjectDescription: " + uri); //$NON-NLS-1$
		if (LOGGER.isTraceEnabled()) {
			LOGGER.trace("error deserializing module from IEObjectDescription=" + eObjectDescription
					+ ": " + uri, e); //$NON-NLS-1$
		}
		// fail safe, because not uncommon (serialized data might have been created with an old version of the N4JS
		// IDE, so the format could be out of date (after an update of the IDE))
		return null;
	}
	final List<EObject> contents = xres.getContents();
	if (contents.isEmpty() || !(contents.get(0) instanceof TModule)) {
		return null;
	}
	final TModule module = (TModule) contents.get(0);
	xres.getContents().clear();

	final String astMD5 = eObjectDescription.getUserData(USER_DATA_KEY_AST_MD5);
	module.setAstMD5(astMD5);

	return module;
}
 
源代码10 项目: neoscada   文件: ParserDriverProcessor.java
private String makeXml ( final Component component ) throws IOException
{
    final XMIResourceImpl xmi = new XMIResourceImpl ();
    xmi.getContents ().add ( EcoreUtil.copy ( component ) );

    final StringWriter writer = new StringWriter ();
    xmi.save ( writer, null );
    return writer.toString ();
}
 
@Test public void testMissingNsURI() {
	Resource resource = new XMIResourceImpl();
	EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
	ePackage.setName("test");
	EClass eClass = EcoreFactory.eINSTANCE.createEClass();
	eClass.setName("Test");
	ePackage.getEClassifiers().add(eClass);
	resource.getContents().add(ePackage);
	Map<QualifiedName, IEObjectDescription> index = createIndex(resource);
	checkEntry(index, ePackage, false, "test");
	checkEntry(index, eClass, false, "test", "Test");
	assertEquals(2,index.size());
}
 
@Test public void testMissingName() {
	Resource resource = new XMIResourceImpl();
	EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
	ePackage.setNsURI("http://test");
	EClass eClass = EcoreFactory.eINSTANCE.createEClass();
	eClass.setName("Test");
	ePackage.getEClassifiers().add(eClass);
	resource.getContents().add(ePackage);
	Map<QualifiedName, IEObjectDescription> index = createIndex(resource);
	checkEntry(index, ePackage, true, "http://test");
	checkEntry(index, eClass, true, "http://test", "Test");
	assertEquals(2,index.size());
}
 
源代码13 项目: M2Doc   文件: AbstractTemplatesTestSuite.java
/**
 * Constructor.
 * 
 * @param testFolder
 *            the test folder path
 * @throws IOException
 *             if the tested template can't be read
 * @throws DocumentParserException
 *             if the tested template can't be parsed
 */
public AbstractTemplatesTestSuite(String testFolder) throws IOException, DocumentParserException {
    MyDslPackage.eINSTANCE.getName();// make sure MyDsl is loaded (XText)
    UMLPackage.eINSTANCE.getName(); // make sure UML2 is loaded
    this.testFolderPath = testFolder.replaceAll("\\\\", "/");
    final URI genconfURI = getGenconfURI(new File(testFolderPath));
    if (URIConverter.INSTANCE.exists(genconfURI, Collections.EMPTY_MAP)) {
        final ResourceSet rs = getResourceSetForGenconf();
        generation = getGeneration(genconfURI, rs);
    } else {
        generation = GenconfFactory.eINSTANCE.createGeneration();
        Resource r = new XMIResourceImpl(genconfURI);
        r.getContents().add(generation);
    }
    final URI templateURI = getTemplateURI(new File(testFolderPath));
    setTemplateFileName(generation, URI.decode(templateURI.deresolve(genconfURI).toString()));
    final List<Exception> exceptions = new ArrayList<>();
    resourceSetForModels = getResourceSetForModel(exceptions);
    queryEnvironment = GenconfUtils.getQueryEnvironment(resourceSetForModels, generation);
    new MyDslStandaloneSetup().createInjectorAndDoEMFRegistration();
    documentTemplate = M2DocUtils.parse(resourceSetForModels.getURIConverter(), templateURI, queryEnvironment,
            new ClassProvider(this.getClass().getClassLoader()), new BasicMonitor());
    for (Exception e : exceptions) {
        final XWPFRun run = M2DocUtils.getOrCreateFirstRun(documentTemplate.getDocument());
        documentTemplate.getBody().getValidationMessages()
                .add(new TemplateValidationMessage(ValidationMessageLevel.ERROR, e.getMessage(), run));
    }
    variables = GenconfUtils.getVariables(generation, resourceSetForModels);
}
 
源代码14 项目: M2Doc   文件: NewGenerationWizard.java
/**
 * Constructor.
 */
public NewGenerationWizard() {
    generation = GenconfPackage.eINSTANCE.getGenconfFactory().createGeneration();
    final Resource resource = new XMIResourceImpl();
    final ResourceSet rs = new ResourceSetImpl();
    rs.getResources().add(resource);
    resource.getContents().add(generation);
    TransactionalEditingDomain.Factory.INSTANCE.createEditingDomain(rs);
}
 
源代码15 项目: xtext-core   文件: InjectableValidatorTest.java
@Test public void testWrongResource() throws Exception {
	Main main = LangATestLanguageFactory.eINSTANCE.createMain();
	XMIResource xmiResource = new XMIResourceImpl();
	xmiResource.getContents().add(main);
	assertTrue(languageSpecificValidator.validate(main, new BasicDiagnostic(), null));
	assertTrue(languageSpecificValidator.validate(main, new BasicDiagnostic(), context));
	context.put(AbstractInjectableValidator.CURRENT_LANGUAGE_NAME, xtextResource.getLanguageName());
	assertFalse(languageSpecificValidator.validate(main, new BasicDiagnostic(), context));

	context.clear();
	assertFalse(languageAgnosticValidator.validate(main, new BasicDiagnostic(), null));
	assertFalse(languageAgnosticValidator.validate(main, new BasicDiagnostic(), context));
	context.put(AbstractInjectableValidator.CURRENT_LANGUAGE_NAME, xtextResource.getLanguageName());
	assertFalse(languageAgnosticValidator.validate(main, new BasicDiagnostic(), context));
}
 
源代码16 项目: xtext-core   文件: GenericUnloaderTest.java
protected EPackage createExample() {
	ResourceSetImpl resourceSet = new ResourceSetImpl();
	Resource resource = new XMIResourceImpl(URI.createURI("test"));
	resourceSet.getResources().add(resource);
	EPackage root = EcoreFactory.eINSTANCE.createEPackage();
	resource.getContents().add(root);
	EClass child = EcoreFactory.eINSTANCE.createEClass();
	root.getEClassifiers().add(child);
	return root;
}
 
private Resource getResource(String resourceURI, String references) {
	XMIResourceImpl res = new XMIResourceImpl();
	res.setURI(URI.createURI(resourceURI));
	EcoreFactory f = EcoreFactory.eINSTANCE;
	EClass class1 = f.createEClass();
	res.getContents().add(class1);
	class1.setName("mytype");
	if (references!=null) {
		EClass referencedProxy = f.createEClass();
		String fragment = res.getURIFragment(class1);
		((InternalEObject)referencedProxy).eSetProxyURI(URI.createURI(references).appendFragment(fragment));
		class1.getESuperTypes().add(referencedProxy);
	}
	return res;
}
 
@Test public void testCrossResourceContainment() throws Exception {
	Element parent = CrossContainmentFactory.eINSTANCE.createElement();
	Element child = CrossContainmentFactory.eINSTANCE.createElement();
	parent.getContainment().add(child);
	Resource resource0 = new XMIResourceImpl(URI.createFileURI("test0.xmi"));
	resource0.getContents().add(parent);
	DefaultTransientValueService defaultTransientValueService = new DefaultTransientValueService();
	assertTrue(defaultTransientValueService.isTransient(child, CrossContainmentPackage.Literals.ELEMENT__CONTAINER, 0));
	Resource resource1 =new XMIResourceImpl(URI.createFileURI("test0.xmi"));
	resource1.getContents().add(child);
	assertEquals(parent, child.getContainer());
	assertFalse(defaultTransientValueService.isTransient(child, CrossContainmentPackage.Literals.ELEMENT__CONTAINER, 0));
}
 
源代码19 项目: statecharts   文件: StextResourceFactory.java
@Override
public Resource createResource(URI uri) {
	String domainID = DomainRegistry.determineDomainID(uri);
	if (domainID == null || DomainRegistry.getDomain(domainID) == null) {
		return new XMIResourceImpl(uri);
	}
	IDomain domain = DomainRegistry.getDomain(domainID);
	Injector injector = getInjector(domain);
	Resource resource = injector.getInstance(Resource.class);
	ResourceSet set = new ResourceSetImpl();
	set.getResources().add(resource);
	resource.setURI(uri);
	return resource;
}
 
源代码20 项目: bonita-studio   文件: DiagramFileStoreTest.java
private Pool aPoolInAResourceWithUUID(final String uuid) throws IOException {
    final XMIResourceImpl xmiResourceImpl = new XMIResourceImpl();
    final Pool pool = aPool().build();
    xmiResourceImpl.getContents().add(pool);
    xmiResourceImpl.setID(pool, uuid);
    return pool;
}
 
源代码21 项目: n4js   文件: UserDataMapper.java
/**
 * Serializes an exported script (or other {@link EObject}) stored in given resource content at index 1, and stores
 * that in a map under key {@link #USER_DATA_KEY_SERIALIZED_SCRIPT}.
 */
public static Map<String, String> createUserData(final TModule exportedModule) throws IOException,
		UnsupportedEncodingException {
	if (exportedModule.isPreLinkingPhase()) {
		throw new AssertionError("Module may not be from the preLinkingPhase");
	}
	// TODO GH-230 consider disallowing serializing reconciled modules to index with fail-fast
	// if (exportedModule.isReconciled()) {
	// throw new IllegalArgumentException("module must not be reconciled");
	// }
	final Resource originalResourceUncasted = exportedModule.eResource();
	if (!(originalResourceUncasted instanceof N4JSResource)) {
		throw new IllegalArgumentException("module must be contained in an N4JSResource");
	}
	final N4JSResource originalResource = (N4JSResource) originalResourceUncasted;

	// resolve resource (i.e. resolve lazy cross-references, resolve DeferredTypeRefs, etc.)
	originalResource.performPostProcessing();
	if (EcoreUtilN4.hasUnresolvedProxies(exportedModule) || TypeUtils.containsDeferredTypeRefs(exportedModule)) {
		// don't write invalid TModule to index
		// TODO GHOLD-193 reconsider handling of this error case
		// 2016-05-11: keeping fail-safe behavior for now (in place at least since end of 2014).
		// Fail-fast behavior not possible, because common case (e.g. typo in an identifier in the source code, that
		// leads to an unresolvable proxy in the TModule)
		return createTimestampUserData(exportedModule);
	}

	// add copy -- EObjects can only be contained in a single resource, and
	// we do not want to mess up the original resource
	URI resourceURI = originalResource.getURI();
	XMIResource resourceForUserData = new XMIResourceImpl(resourceURI);

	resourceForUserData.getContents().add(TypeUtils.copyWithProxies(exportedModule));

	ByteArrayOutputStream baos = new ByteArrayOutputStream();

	resourceForUserData.save(baos, getOptions(resourceURI, BINARY));

	String serializedScript = BINARY ? Base64.getEncoder().encodeToString(baos.toByteArray())
			: baos.toString(TRANSFORMATION_CHARSET_NAME);

	final HashMap<String, String> ret = new HashMap<>();
	ret.put(USER_DATA_KEY_SERIALIZED_SCRIPT, serializedScript);

	final String astMD5 = exportedModule.getAstMD5();
	if (astMD5 != null) {
		ret.put(USER_DATA_KEY_AST_MD5, astMD5);
	}

	if (exportedModule.isMainModule()) {
		ret.put(N4JSResourceDescriptionStrategy.MAIN_MODULE_KEY, Boolean.toString(exportedModule.isMainModule()));
	}

	// in case of filling file store fingerprint to keep filled type updated by the incremental builder.
	// required to trigger rebuilds even if only minor changes happened to the content.
	if (exportedModule.isStaticPolyfillModule()) {
		final String contentHash = Integer.toHexString(originalResource.getParseResult().getRootNode().hashCode());
		ret.put(USER_DATA_KEY_STATIC_POLYFILL_CONTENTHASH, contentHash);
	}
	return ret;
}
 
@Test public void testSpecialReferences() {
	EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
	ePackage.setName("test");
	ePackage.setNsPrefix("test");
	ePackage.setNsURI("test");

	EClass eClass = EcoreFactory.eINSTANCE.createEClass();
	eClass.setName("Test");
	eClass.getESuperTypes().add(EcorePackage.Literals.EPACKAGE);
	ePackage.getEClassifiers().add(eClass);

	EReference eReference1 = EcoreFactory.eINSTANCE.createEReference();
	eReference1.setContainment(false);
	eReference1.setName("onlyExportedRef");
	eReference1.setEType(EcorePackage.Literals.EPACKAGE);
	eClass.getEStructuralFeatures().add(eReference1);

	EReference eReference2 = EcoreFactory.eINSTANCE.createEReference();
	eReference2.setContainment(true);
	eReference2.setName("containmentRef");
	eReference2.setEType(EcorePackage.Literals.EPACKAGE);
	eClass.getEStructuralFeatures().add(eReference2);

	EReference eReference3 = EcoreFactory.eINSTANCE.createEReference();
	eReference3.setContainment(false);
	eReference3.setTransient(true);
	eReference3.setName("transientRef");
	eReference3.setEType(EcorePackage.Literals.EPACKAGE);
	eClass.getEStructuralFeatures().add(eReference3);

	EReference eReference4 = EcoreFactory.eINSTANCE.createEReference();
	eReference4.setContainment(false);
	eReference4.setVolatile(true);
	eReference4.setName("volatileRef");
	eReference4.setEType(EcorePackage.Literals.EPACKAGE);
	eClass.getEStructuralFeatures().add(eReference4);

	EReference eReference5 = EcoreFactory.eINSTANCE.createEReference();
	eReference5.setContainment(false);
	eReference5.setDerived(true);
	eReference5.setName("derivedRef");
	eReference5.setEType(EcorePackage.Literals.EPACKAGE);
	eClass.getEStructuralFeatures().add(eReference5);

	EObject object = ePackage.getEFactoryInstance().create(eClass);
	object.eSet(EcorePackage.Literals.ENAMED_ELEMENT__NAME, "testname");
	object.eSet(eReference1, EcorePackage.eINSTANCE);
	object.eSet(eReference2, ePackage.getEFactoryInstance().create(eClass));
	object.eSet(eReference3, EcorePackage.eINSTANCE);
	object.eSet(eReference4, EcorePackage.eINSTANCE);
	object.eSet(eReference5, EcorePackage.eINSTANCE);

	Resource testResource = new XMIResourceImpl(URI.createPlatformResourceURI("test.ecore", true));
	testResource.getContents().add(object);
	IResourceDescription resourceDescription = createResourceDescription(testResource);
	assertEquals("Only one external reference expected", 1, size(resourceDescription.getReferenceDescriptions()));
	IReferenceDescription referenceDescription = resourceDescription.getReferenceDescriptions().iterator().next();
	assertEquals(-1, referenceDescription.getIndexInList());
	assertEquals(EcoreUtil.getURI(object), referenceDescription.getSourceEObjectUri());
	assertEquals(eReference1, referenceDescription.getEReference());
	assertEquals(EcoreUtil.getURI(EcorePackage.eINSTANCE), referenceDescription.getTargetEObjectUri());
	assertEquals(EcoreUtil.getURI(object), referenceDescription.getContainerEObjectURI());
}
 
@Test public void testCrossResourceContainment() {
	EPackage ePackage = EcoreFactory.eINSTANCE.createEPackage();
	ePackage.setName("test");
	ePackage.setNsPrefix("test");
	ePackage.setNsURI("test");

	EClass eClass = EcoreFactory.eINSTANCE.createEClass();
	eClass.setName("Test");
	ePackage.getEClassifiers().add(eClass);
	
	EAttribute nameAttribute = EcoreFactory.eINSTANCE.createEAttribute();
	nameAttribute.setName("name");
	nameAttribute.setID(true);
	nameAttribute.setEType(EcorePackage.Literals.ESTRING);
	eClass.getEStructuralFeatures().add(nameAttribute);

	EReference containmentRef = EcoreFactory.eINSTANCE.createEReference();
	containmentRef.setContainment(true);
	containmentRef.setName("crossResourceContainment");
	containmentRef.setEType(eClass);
	containmentRef.setResolveProxies(true);
	eClass.getEStructuralFeatures().add(containmentRef);
	
	EReference containerRef = EcoreFactory.eINSTANCE.createEReference();
	containerRef.setName("containerRef");
	containerRef.setEType(eClass);
	containerRef.setResolveProxies(true);
	containerRef.setEOpposite(containmentRef);
	containmentRef.setEOpposite(containerRef);
	eClass.getEStructuralFeatures().add(containerRef);

	EObject container = ePackage.getEFactoryInstance().create(eClass);
	EObject child = ePackage.getEFactoryInstance().create(eClass);
	
	Resource containerResource = new XMIResourceImpl(URI.createPlatformResourceURI("container.ecore", true));
	Resource childResource = new XMIResourceImpl(URI.createPlatformResourceURI("child.ecore", true));
	ResourceSet resourceSet = new ResourceSetImpl();
	resourceSet.getResources().add(containerResource);
	resourceSet.getResources().add(childResource);
	
	containerResource.getContents().add(container);
	childResource.getContents().add(child);
	
	container.eSet(containmentRef, child);
	assertTrue(container.eResource() != child.eResource());
	
	{ 
		IResourceDescription containerDescription = createResourceDescription(containerResource);
		IReferenceDescription onlyContainerElement = Iterables.getOnlyElement(containerDescription.getReferenceDescriptions());
		assertEquals(-1, onlyContainerElement.getIndexInList());
		assertEquals(EcoreUtil.getURI(container), onlyContainerElement.getSourceEObjectUri());
		assertEquals(containmentRef, onlyContainerElement.getEReference());
		assertEquals(EcoreUtil.getURI(child), onlyContainerElement.getTargetEObjectUri());
	}
	{
		IResourceDescription childDescription = createResourceDescription(childResource);
		IReferenceDescription onlyChildElement = Iterables.getOnlyElement(childDescription.getReferenceDescriptions());
		assertEquals(-1, onlyChildElement.getIndexInList());
		assertEquals(EcoreUtil.getURI(child), onlyChildElement.getSourceEObjectUri());
		assertEquals(containerRef, onlyChildElement.getEReference());
		assertEquals(EcoreUtil.getURI(container), onlyChildElement.getTargetEObjectUri());
	}
}
 
 类所在包
 类方法
 同包方法