Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » Epsilon » Loading model with multiple resources(Loading model with multiple resources)
Loading model with multiple resources [message #1843948] Wed, 25 August 2021 12:56 Go to next message
Arseniy Isakov is currently offline Arseniy IsakovFriend
Messages: 118
Registered: May 2012
Senior Member
Hi

How can I load model which is distributed buy multiple Ecore files
I have created code simple but it is not working. I have trace it loading files but
at the end throws exception

Internal error: java.io.FileNotFoundException: /Users/arseniy/MyPrj/git/persistence [Is a directory]
at java.base/java.io.FileInputStream.open0[Native Method]
at java.base/java.io.FileInputStream.open[FileInputStream.java:219]
at java.base/java.io.FileInputStream.<init>[FileInputStream.java:157]
at org.eclipse.emf.ecore.resource.impl.FileURIHandlerImpl.createInputStream[FileURIHandlerImpl.java:99]
at org.eclipse.emf.ecore.resource.impl.ExtensibleURIConverterImpl.createInputStream[ExtensibleURIConverterImpl.java:360]
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load[ResourceImpl.java:1269]
at org.eclipse.epsilon.emc.emf.EmfModel.loadModelFromUri[EmfModel.java:263]
at org.eclipse.epsilon.emc.emf.EmfModel.loadModel[EmfModel.java:174]
at org.eclipse.epsilon.eol.models.CachedModel.load[CachedModel.java:168]
at org.eclipse.epsilon.emc.emf.EmfModel.load[EmfModel.java:170]
at org.tura.convert.App.createEmfModelByURI[App.java:43]
at org.tura.convert.App.transform[App.java:26]
at org.tura.convert.App.main[App.java:16]

at java.base/java.io.FileInputStream.open0(Native Method)
at java.base/java.io.FileInputStream.open(FileInputStream.java:219)
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157)
at org.eclipse.emf.ecore.resource.impl.FileURIHandlerImpl.createInputStream(FileURIHandlerImpl.java:99)
at org.eclipse.emf.ecore.resource.impl.ExtensibleURIConverterImpl.createInputStream(ExtensibleURIConverterImpl.java:360)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1269)
at org.eclipse.epsilon.emc.emf.EmfModel.loadModelFromUri(EmfModel.java:263)
at org.eclipse.epsilon.emc.emf.EmfModel.loadModel(EmfModel.java:174)
at org.eclipse.epsilon.eol.models.CachedModel.load(CachedModel.java:168)
at org.eclipse.epsilon.emc.emf.EmfModel.load(EmfModel.java:170)
at org.tura.convert.App.createEmfModelByURI(App.java:43)
at org.tura.convert.App.transform(App.java:26)
at org.tura.convert.App.main(App.java:16)
Caused by: java.io.FileNotFoundException: /Users/arseniy/MyPrj/git/persistence (Is a directory)
... 13 more


I am on Epsilon 1.4

Thanks
Arseniy Isakov



package org.tura.convert;

import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Paths;

import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.epsilon.common.util.StringProperties;
import org.eclipse.epsilon.emc.emf.EmfModel;
import org.eclipse.epsilon.eol.exceptions.models.EolModelLoadingException;
import org.eclipse.epsilon.eol.models.IRelativePathResolver;

public class App {
	public static void main(String[] args) {
		new App().transform();
	}

	public void transform() {
		try {
			String modelFile = getFileURI("/Users/arseniy/MyPrj/git/tura5/sirius/plugins/org.tura.metamodel/model/domain.ecore");
		

			EPackage.Registry.INSTANCE.put(EcorePackage.eINSTANCE.getNsURI(), EcorePackage.eINSTANCE);

			EmfModel model = createEmfModelByURI("Model", modelFile, EcorePackage.eINSTANCE.getNsURI(), true, false);
			
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	protected EmfModel createEmfModelByURI(String name, String model, String metamodel, boolean readOnLoad,
			boolean storeOnDisposal) throws EolModelLoadingException, URISyntaxException {
		EmfModel emfModel = new EmfModel();
		StringProperties properties = new StringProperties();
		properties.put(EmfModel.PROPERTY_NAME, name);
		properties.put(EmfModel.PROPERTY_METAMODEL_URI, metamodel);
		properties.put(EmfModel.PROPERTY_FILE_BASED_METAMODEL_URI, model);
		properties.put(EmfModel.PROPERTY_READONLOAD, readOnLoad + "");
		properties.put(EmfModel.PROPERTY_STOREONDISPOSAL, storeOnDisposal + "");
		emfModel.load(properties, (IRelativePathResolver) null);
		return emfModel;
	}

	protected String getFileURI(String fileName) throws URISyntaxException {
		URI uri = Paths.get(fileName).toUri();
		return uri.toString();
	}

}

[Updated on: Wed, 25 August 2021 13:27]

Report message to a moderator

Re: Loading model with multiple resources [message #1843951 is a reply to message #1843948] Wed, 25 August 2021 13:48 Go to previous messageGo to next message
Arseniy Isakov is currently offline Arseniy IsakovFriend
Messages: 118
Registered: May 2012
Senior Member
Ok if I use both properties

properties.put(EmfModel.PROPERTY_MODEL_URI, model);
properties.put(EmfModel.PROPERTY_FILE_BASED_METAMODEL_URI, model);

Seams it works. Not sure is it right or wrong
Re: Loading model with multiple resources [message #1843957 is a reply to message #1843951] Wed, 25 August 2021 14:42 Go to previous messageGo to next message
Dimitris Kolovos is currently offline Dimitris KolovosFriend
Messages: 2165
Registered: July 2009
Location: York, UK
Senior Member

Hi Arseniy,

The first statement should suffice; if this is not the case it'd be great if you could share a minimal example.

Best,
Dimitris
Re: Loading model with multiple resources [message #1843960 is a reply to message #1843957] Wed, 25 August 2021 14:58 Go to previous messageGo to next message
Arseniy Isakov is currently offline Arseniy IsakovFriend
Messages: 118
Registered: May 2012
Senior Member
Hi Dimitris
See an attachment

Thanks
Arseniy Isakov
Re: Loading model with multiple resources [message #1844031 is a reply to message #1843960] Sat, 28 August 2021 12:14 Go to previous messageGo to next message
Dimitris Kolovos is currently offline Dimitris KolovosFriend
Messages: 2165
Registered: July 2009
Location: York, UK
Senior Member

Hi Arseniy,

EolEngine seems to be broken. My suggestion would be to use EolModule instead as follows.

EolModule module = new EolModule();
module.getContext().getModelRepository().addModel(model);
module.parse("var q = EPackage.all.println();return q;");
Object qq = module.execute();


Best,
Dimitris
Re: Loading model with multiple resources [message #1844033 is a reply to message #1844031] Sat, 28 August 2021 19:04 Go to previous messageGo to next message
Arseniy Isakov is currently offline Arseniy IsakovFriend
Messages: 118
Registered: May 2012
Senior Member
Hi Dimitris

if you do like this it will return you only one package. . domain.ecore references to another resources. All ecore files are connected. But epsilon loaded only main file and ignored rest of resources


package org.tura.convert;

import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;

import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Paths;

import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.epsilon.common.util.StringProperties;
import org.eclipse.epsilon.emc.emf.EmfModel;
import org.eclipse.epsilon.eol.EolModule;
import org.eclipse.epsilon.eol.exceptions.models.EolModelLoadingException;
import org.eclipse.epsilon.eol.models.IRelativePathResolver;
import org.junit.Test;

public class MultiResourceModelLoadTest {

@Test
	public void transformTest() {
		try {
			String modelFile =  MultiResourceModelLoadTest.class.getResource("domain.ecore").toURI().toString();
		

			EPackage.Registry.INSTANCE.put(EcorePackage.eINSTANCE.getNsURI(), EcorePackage.eINSTANCE);

			EmfModel model = createEmfModelByURI("Model", modelFile, EcorePackage.eINSTANCE.getNsURI(), true, false);
			
			EolModule module = new EolModule();;
			module.getContext().getModelRepository().addModel(model);
			module.parse("var q = EPackage.all.println();  return q;");
			Object qq = module.execute();

			assertNotNull(qq);
			assertNotEquals(1,qq.size());
			System.out.println("");
			
		} catch (Exception e) {
			fail();
			e.printStackTrace();
		}

	}

	protected EmfModel createEmfModelByURI(String name, String model, String metamodel, boolean readOnLoad,
			boolean storeOnDisposal) throws EolModelLoadingException, URISyntaxException {
		EmfModel emfModel = new EmfModel();
		StringProperties properties = new StringProperties();
		properties.put(EmfModel.PROPERTY_NAME, name);
		properties.put(EmfModel.PROPERTY_METAMODEL_URI, metamodel);
		properties.put(EmfModel.PROPERTY_MODEL_URI,model);
		properties.put(EmfModel.PROPERTY_READONLOAD, readOnLoad + "");
		properties.put(EmfModel.PROPERTY_STOREONDISPOSAL, storeOnDisposal + "");
		emfModel.load(properties, (IRelativePathResolver) null);
		return emfModel;
	}

	protected String getFileURI(String fileName) throws URISyntaxException {
		URI uri = Paths.get(fileName).toUri();
		return uri.toString();
	}

}

[Updated on: Sat, 28 August 2021 22:58]

Report message to a moderator

Re: Loading model with multiple resources [message #1844035 is a reply to message #1844033] Sat, 28 August 2021 23:06 Go to previous messageGo to next message
Arseniy Isakov is currently offline Arseniy IsakovFriend
Messages: 118
Registered: May 2012
Senior Member
With 2.3.0 loaded only 5 EPackage but should be 13. See attachment with hierarchy .I think this is connected with EcoreUtil.resolveAll
				model.load(getResourceLoadOptions());
				if (expand) {
					EcoreUtil.resolveAll(model);
				}

[Updated on: Sun, 29 August 2021 00:45]

Report message to a moderator

Re: Loading model with multiple resources [message #1844037 is a reply to message #1844035] Sun, 29 August 2021 01:37 Go to previous messageGo to next message
Arseniy Isakov is currently offline Arseniy IsakovFriend
Messages: 118
Registered: May 2012
Senior Member
This what I did. Not sure if this is related to Epsilon.

package org.tura.convert;

import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;

import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Paths;
import java.util.Iterator;
import java.util.List;

import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.epsilon.common.util.StringProperties;
import org.eclipse.epsilon.emc.emf.EmfModel;
import org.eclipse.epsilon.eol.EolModule;
import org.eclipse.epsilon.eol.exceptions.models.EolModelLoadingException;
import org.eclipse.epsilon.eol.models.IRelativePathResolver;
import org.junit.Test;

public class MultiResourceModelLoadTest {

	@SuppressWarnings("unchecked")
	@Test
	public void transformTest() {
		try {
			EPackage.Registry.INSTANCE.put(EcorePackage.eINSTANCE.getNsURI(), EcorePackage.eINSTANCE);
			EolModule module = new EolModule();

			String modelFile = MultiResourceModelLoadTest.class.getResource("domain.ecore").toURI().toString();
			EmfModel model = createEmfModelByURI("Model", modelFile, EcorePackage.eINSTANCE.getNsURI(), true, false);
			module.getContext().getModelRepository().addModel(model);
			module.parse("var q = EClass.all.select(r|r.name='ApplicationRealm');  return q;");
			List<EObject> qq = (List<EObject>) module.execute();
			EObject eObject = qq.get(0);
			EcoreUtil.resolveAll(eObject);

			module.parse("var q = EClass.all.select(r|r.name='ApplicationMessageLibrary');  return q;");
			qq = (List<EObject>) module.execute();
			eObject = qq.get(0);
			EcoreUtil.resolveAll(eObject);

			module.parse("var q = EClass.all.select(r|r.name='ApplicationInfrastructureLayer');  return q;");
			qq = (List<EObject>) module.execute();
			eObject = qq.get(0);
			EcoreUtil.resolveAll(eObject);
			
			module.parse("var q = EClass.all.select(r|r.name='ApplicationUIPackage');  return q;");
			qq = (List<EObject>) module.execute();
			eObject = qq.get(0);
			EcoreUtil.resolveAll(eObject);			

			
			module.parse("var q = EClass.all.select(r|r.name='ApplicationRecipe');  return q;");
			qq = (List<EObject>) module.execute();
			eObject = qq.get(0);
			EcoreUtil.resolveAll(eObject);			
			
			module.parse("var q = EClass.all.select(r|r.name='ApplicationMapper');  return q;");
			qq = (List<EObject>) module.execute();
			eObject = qq.get(0);
			EcoreUtil.resolveAll(eObject);			
			
			module.parse("var q = EClass.all.select(r|r.name='ApplicationStyle');  return q;");
			qq = (List<EObject>) module.execute();
			eObject = qq.get(0);
			EcoreUtil.resolveAll(eObject);			
			
			
			module.parse("var q = EPackage.all;  return q;");
			qq = (List<EObject>) module.execute();
			int i = 1;
			for ( EObject eO : qq) {
				System.out.println(i  +" -- "+eO.toString());
				i++;
			}

			assertNotNull(qq);
			assertNotEquals(1, qq.size());
			System.out.println("");

		} catch (Exception e) {
			fail();
			e.printStackTrace();
		}

	}

	protected EmfModel createEmfModelByURI(String name, String model, String metamodel, boolean readOnLoad,
			boolean storeOnDisposal) throws EolModelLoadingException, URISyntaxException {
		EmfModel emfModel = new EmfModel();
		StringProperties properties = new StringProperties();
		properties.put(EmfModel.PROPERTY_NAME, name);
		properties.put(EmfModel.PROPERTY_METAMODEL_URI, metamodel);
		properties.put(EmfModel.PROPERTY_MODEL_URI, model);
		properties.put(EmfModel.PROPERTY_READONLOAD, readOnLoad + "");
		properties.put(EmfModel.PROPERTY_STOREONDISPOSAL, storeOnDisposal + "");
		properties.put(EmfModel.PROPERTY_EXPAND, true);
		emfModel.load(properties, (IRelativePathResolver) null);
		return emfModel;
	}

	protected String getFileURI(String fileName) throws URISyntaxException {
		URI uri = Paths.get(fileName).toUri();
		return uri.toString();
	}

}
Re: Loading model with multiple resources [message #1844098 is a reply to message #1844037] Wed, 01 September 2021 09:15 Go to previous message
Dimitris Kolovos is currently offline Dimitris KolovosFriend
Messages: 2165
Registered: July 2009
Location: York, UK
Senior Member

Hi Arseniy,

Something seems to be going wrong with the metamodels. If I open domain.ecore using the tree-based Ecore editor, go to DomainArtifacts.techLeafs and then click on the value of its EType property in the Properties view, the editor crashes. I've tried deleting everything else and keeping only DomainArtifacts.techLeafs and this works well so the problem must be elsewhere in the metamodel.

Best,
Dimitris
Previous Topic:Materialize Ecore metamodel from registry
Next Topic:Generating Hostable Picto Views/Server Use
Goto Forum:
  


Current Time: Sat Apr 27 11:46:40 GMT 2024

Powered by FUDForum. Page generated in 0.03594 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top