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 |
Arseniy Isakov 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 #1844031 is a reply to message #1843960] |
Sat, 28 August 2021 12:14 |
|
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 |
Arseniy Isakov 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 #1844037 is a reply to message #1844035] |
Sun, 29 August 2021 01:37 |
Arseniy Isakov 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 |
|
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
|
|
|
Goto Forum:
Current Time: Sat Apr 27 11:46:40 GMT 2024
Powered by FUDForum. Page generated in 0.03594 seconds
|