Skip to main content
aboutsummaryrefslogtreecommitdiffstats
blob: f019c25f7b0b4a4e0c03f56989dcd582f0e9f9c6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package org.eclipse.emf.ecore.xcore.util

import org.eclipse.emf.ecore.xcore.mappings.XcoreMapper
import com.google.inject.Inject
import org.eclipse.emf.ecore.xcore.XPackage
import org.eclipse.emf.codegen.ecore.genmodel.GenModelFactory
import java.util.Collections
import static extension org.eclipse.xtext.xtend2.lib.EObjectExtensions.*
import org.eclipse.emf.codegen.ecore.genmodel.GenClass
import org.eclipse.emf.codegen.ecore.genmodel.GenPackage
import org.eclipse.emf.ecore.xcore.XClass
import org.eclipse.emf.codegen.ecore.genmodel.GenFeature
import org.eclipse.emf.ecore.xcore.XStructuralFeature
import org.eclipse.emf.codegen.ecore.genmodel.GenOperation
import org.eclipse.emf.ecore.xcore.XOperation
import org.eclipse.emf.codegen.ecore.genmodel.GenDataType
import org.eclipse.emf.ecore.xcore.XDataType

class XcoreGenmodelBuilder {
	
	@Inject extension XcoreMapper mapper
	
	def getGenModel(XPackage pack) {
		val ePackage = pack.mapping.getEPackage
		val genModel =  GenModelFactory::eINSTANCE.createGenModel();
      	genModel.initialize(Collections::singleton(ePackage));
      	pack.eResource.getContents().add(1, genModel);
      	genModel.initialize();
      	genModel.updateClasspath = false
      	// set to src-gen
      	if (!genModel.modelDirectory.endsWith('-gen'))
      		genModel.modelDirectory = genModel.modelDirectory + "-gen"
      for (genElement : genModel.allContentsIterable)
      {
      	switch genElement {
      		GenPackage : 
      		{
      			val xPack = genElement.ecorePackage.toXcoreMapping.xcoreElement as XPackage
				xPack.mapping.genPackage = genElement
				genElement.toXcoreMapping.xcoreElement = xPack    			
      		}
      		GenClass :
      		{
      			val xClass = genElement.ecoreClass.toXcoreMapping.xcoreElement as XClass
				xClass.mapping.genClass = genElement
				genElement.toXcoreMapping.xcoreElement = xClass    			
      		}
      		GenDataType :
      		{
      			val xDataType = genElement.ecoreDataType.toXcoreMapping.xcoreElement as XDataType
				xDataType.mapping.genDataType = genElement
				genElement.toXcoreMapping.xcoreElement = xDataType    			
      		}
      		GenFeature :
      		{
      			val xFeature = genElement.ecoreFeature.toXcoreMapping.xcoreElement as XStructuralFeature
				xFeature.mapping.genFeature = genElement
				genElement.toXcoreMapping.xcoreElement = xFeature    			
      		}
      		GenOperation :
      		{
      			val xOperation = genElement.ecoreOperation.toXcoreMapping.xcoreElement as XOperation
				xOperation.mapping.genOperation = genElement
				genElement.toXcoreMapping.xcoreElement = xOperation    			
      		}
      	}
      }
	}
}

Back to the top