Skip to main content



      Home
Home » Modeling » EMF » Generating Ecores/genmodel files for Multiple XSDs programatically(Multiple XSDs generating Multiple Ecore files and an .genmodel file)
Generating Ecores/genmodel files for Multiple XSDs programatically [message #1752071] Wed, 18 January 2017 09:54 Go to next message
Eclipse UserFriend
Hi EMF community!

Well I have this beginner issue of programatically converting XSDs to Ecores and generate code.

I'm trying to convert multiple XSD files into Ecore models and generate the genModel from that as well. I did this manually and selected the related Ecore files and the conversion resulted in multiple Ecore models with one genModel file. Now I need to do this programmatically, and I managed to do the first part of converting multiple XSD files into Ecores. I need to generate the genModel from this process now as well. This seems to me as a tough task as I don't know how. I saw proposed code snippet in the forum for getting the genModel for an XSD to ecore, but I had a problem then of filling out the different variables there, also I'm doing this for multiple interrelated XSDs/Ecores not only one to one.

Below is a code I had for transforming multiple XSDs to Ecore files which works:

	public void convertXSDToEcore()
	{
		String projPath = Paths.get("").toAbsolutePath().toString();
		String srcPath = projPath + "\\srcXSDs\\";
		File outputFile = new File(projPath + "\\genEcores\\");
	
		Collection<URI> schemaURIs = null;
		try {
			schemaURIs = this.getSchemaFileCollection(new File(srcPath));
		} catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		XSDEcoreBuilder xsdEcoreBuilder = new XSDEcoreBuilder();

		Collection<Resource> ecoreResources = xsdEcoreBuilder.generateResources(schemaURIs);
		
	    // for every resource found (includes eventually referenced XSDs)
	    for (Resource ecoreResource : ecoreResources) {
	        try {
	            if (ecoreResource.getClass().getName().contains("EcoreResourceFactoryImpl")) {
	            	String[] nameSegments = ecoreResource.getURI().toString().split(":");
	                ecoreResource.save(new FileOutputStream(outputFile.getAbsolutePath() + "\\"+ nameSegments[nameSegments.length-2]+ "_" + nameSegments[nameSegments.length-1] + ".ecore"), null);
	            }
	        } catch (IOException e) {
	            // TODO Auto-generated catch block
	            e.printStackTrace();
	        }
	    }

	    this.createGenModel2(ecoreResources.iterator().next());
	}


I had a look at other similar topics but none had this multiple XSDs/Ecores scenario. I'm trying out to have something to work, but in my opinion this should be a trivial recurring problem that should be obvious now to the community, documented and should be easy to reuse by others.

Any help would be appreciated,



[Updated on: Fri, 20 January 2017 10:55] by Moderator

Re: Generating Ecores/genmodel files for Multiple XSDs programatically [message #1752118 is a reply to message #1752071] Wed, 18 January 2017 22:47 Go to previous messageGo to next message
Eclipse UserFriend
You could look in org.eclipse.emf.codegen.ecore.Generator.PlatformRunnable.run(Generator, Object) . It's mostly an issue of creating a GenModel and calling org.eclipse.emf.codegen.ecore.genmodel.GenModel.initialize(Collection<? extends EPackage>).
Re: Generating Ecores/genmodel files for Multiple XSDs programatically [message #1752119 is a reply to message #1752118] Wed, 18 January 2017 22:48 Go to previous messageGo to next message
Eclipse UserFriend
No Message Body
Re: Generating Ecores/genmodel files for Multiple XSDs programatically [message #1752159 is a reply to message #1752118] Thu, 19 January 2017 05:15 Go to previous messageGo to next message
Eclipse UserFriend
Would you mind elaborate on this? Do you mean to look into org.eclipse.emf.codegen.ecore.Generator.PlatformRunnable.run(Generator, Object) class documentation to figure out this or do you suggest better way? Any suggestion on how to put these things together? Tutorial/sourcecode/example/ any useful point guide me through?!
Thanks!
Re: Generating Ecores/genmodel files for Multiple XSDs programatically [message #1752160 is a reply to message #1752118] Thu, 19 January 2017 05:16 Go to previous messageGo to next message
Eclipse UserFriend
No Message Body

[Updated on: Thu, 19 January 2017 05:17] by Moderator

Re: Generating Ecores/genmodel files for Multiple XSDs programatically [message #1752164 is a reply to message #1752160] Thu, 19 January 2017 06:39 Go to previous messageGo to next message
Eclipse UserFriend
Of course it's open source, so the source code is all there for you to see. You could, for example, set a breakpoint in the GenModelImpl's initialize method, start a runtime Eclipse IDE, and import several XSDs in the wizard. Then you'll see exactly what it's all doing. There are no specialized tutorials to answer this question, and I'm traveling, so I can only give you a pointer. Most of the work I do with Eclipse involves using the debugger to see how other technologies work, because there most often isn't good documentation for how they work...
Re: Generating Ecores/genmodel files for Multiple XSDs programatically [message #1752287 is a reply to message #1752164] Fri, 20 January 2017 10:52 Go to previous messageGo to next message
Eclipse UserFriend
I cloned http://git.eclipse.org/gitroot/emf/org.eclipse.emf.git and some compilation errors with some projects in org.eclipse.emf.gwt and org.eclipse.emf.rap... projects which I'm trying to resolve now... What other repositories do I need to clone (if any) for XSD import?
I was unable yet to figure out which plugin I need to run in headless or the parameters required my tasks. Which plugin transforms XSD to Ecore? which generates genmodel if I have ecore files?
I tried: ( -application org.eclipse.emf.codegen.ecore.Generator -ecore2GenModel c:\temp\emf -model -noSplash -consoleLog ) but failed as I still have compilation error problems I think in sourcecode.
Is the above the correct headless entry point to create genmodel? Then whats the one for XSD to ecore?

Thanks anyway for help!

[Updated on: Fri, 20 January 2017 10:59] by Moderator

Re: Generating Ecores/genmodel files for Multiple XSDs programatically [message #1752297 is a reply to message #1752287] Fri, 20 January 2017 12:29 Go to previous messageGo to next message
Eclipse UserFriend
There's an Oomph setup for EMF and XSD, but you only need the EMF/XSD SDKs provisioned in the target platform to look at source code. And you can look at what the import wizard does launching a runtime workspace rather than trying to get the headless application to launch.
Re: Generating Ecores/genmodel files for Multiple XSDs programatically [message #1752444 is a reply to message #1752297] Mon, 23 January 2017 14:53 Go to previous message
Eclipse UserFriend
No Message Body

[Updated on: Thu, 26 January 2017 02:47] by Moderator

Previous Topic:(CDO-Server) Mongo DB
Next Topic:Xcore Code Generator
Goto Forum:
  


Current Time: Mon Jul 07 09:01:28 EDT 2025

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

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

Back to the top