Import EMF metamodel in jet template [message #1860949] |
Mon, 11 September 2023 14:30 |
John Henbergs Messages: 239 Registered: October 2020 |
Senior Member |
|
|
Hi,
I am currently trying to customise the item provider template. I have already fixed everything in the genmodel so that it uses dynamic templates. However, I have an issue.
In the template I have registered an ecore metamodel and loaded a model instance of the metamodel the values of which I need in order to guide the generation of code from the template.
The root of the metamodel is Family.
In the following code I am trying to create an object of type Family named familyRoot. I have imported family.Family.
<%@ jet package="org.eclipse.emf.codegen.ecore.templates.edit" imports="java.util.* org.eclipse.emf.codegen.ecore.genmodel.* org.eclipse.emf.ecore.resource.ResourceSet org.eclipse.emf.ecore.* org.eclipse.emf.common.util.URI org.eclipse.emf.ecore.resource.Resource org.eclipse.emf.ecore.resource.impl.ResourceSetImpl java.io.File org.eclipse.emf.ecore.EPackage family.Family" class="ItemProvider"%>
<%
/**
* Copyright (c) 2002-2019 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* IBM - Initial API and implementation
* Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 546714
*/
%>
<%GenClass genClass = (GenClass)argument; GenPackage genPackage = genClass.getGenPackage(); GenModel genModel=genPackage.getGenModel();%>
<%final boolean isJDK50 = genModel.getComplianceLevel().getValue() >= GenJDKLevel.JDK50;%>
<%final boolean forceDefaultCase = genModel.isSwitchMissingDefaultCase();String indentDefaultCase = forceDefaultCase ? "\t\t" : "";%>
<%@ include file="../Header.javajetinc"%>
package <%=genPackage.getProviderPackageName()%>;
<%genModel.addImport("org.eclipse.emf.common.notify.AdapterFactory");%>
<%genModel.addImport("org.eclipse.emf.common.notify.Notification");%>
<%String _List = genModel.getImportedName(genModel.useGenerics() ? "java.util.List<org.eclipse.emf.edit.provider.IItemPropertyDescriptor>" : "java.util.List");%>
<%genModel.markImportLocation(stringBuffer);%>
<%-- Add import for XMI handling --%>
<%genModel.addImport("org.eclipse.emf.ecore.resource.Resource");%>
<%genModel.addImport("org.eclipse.emf.ecore.resource.ResourceSet");%>
<%-- Load the XMI model instance from a file --%>
<%String modelFilePath = "/Family/model/family.xmi";%>
<%genModel.addImport("java.io.IOException");%>
<%genModel.addImport("java.util.Collections");%>
<%genModel.addImport("java.util.Map");%>
<%genModel.addImport("org.eclipse.emf.common.util.URI");%>
<%genModel.addImport("org.eclipse.emf.ecore.EObject");%>
<%genModel.addImport("org.eclipse.emf.ecore.resource.ResourceSet");%>
<%genModel.addImport("org.eclipse.emf.ecore.resource.impl.ResourceSetImpl");%>
<%
ResourceSet resourceSet = new ResourceSetImpl();
Resource ecoreResource = resourceSet.getResource(URI.createFileURI(new File ("/Users/user/eclipse-workspace/Family/model/family.ecore").getAbsolutePath()), true);
EObject ecoreRootObject = ecoreResource.getContents().get(0);
// Get the package and register it dynamically
EPackage ecorePackage = (EPackage) ecoreRootObject;
EPackage.Registry.INSTANCE.put(ecorePackage.getNsURI(), ecorePackage);
Resource xmiResource = resourceSet.getResource(URI.createURI(modelFilePath), true);
EObject rootObject = xmiResource.getContents().get(0);
Family familyroot = rootObject as Family;
String familyName = familyroot.getName();
%>
However, when I generate edit code, a folder named .JETEmitters is generated with java code. This java code that is generated shows an error in line:
Because it is not in the build path. Problem is that this folder is generated when I generate edit code, so I cannot include it in the build path if the project does not exist in the first place.
When I have already generated the .JETEmmiters project and I include family in the build path and generate edit code again, I get the following error:
Build path contains duplicate entry: org.eclipse.jdt.launching.JRE_CONTAINER for project .JETEmmiters
Do you know of any way around this?
Thanks, John!
[Updated on: Mon, 11 September 2023 15:26] Report message to a moderator
|
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.02360 seconds