diff --git a/assets/models/EMFLibrary.ecore b/assets/models/EMFLibrary.ecore new file mode 100644 index 0000000000000000000000000000000000000000..9d9235783b17819f20b820f832c7d418cd00e833 --- /dev/null +++ b/assets/models/EMFLibrary.ecore @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="UTF-8"?> + <ecore:EPackage xmi:version="2.0" + xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" name="library" + nsURI="http://www.eclipse.org/emf/jcrm/samples/emf/sample/Library" nsPrefix="library"> + <eClassifiers xsi:type="ecore:EClass" name="Book"> + <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> + <details key="name" value="Book"/> + <details key="kind" value="elementOnly"/> + </eAnnotations> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="title" unique="false" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"> + <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> + <details key="kind" value="element"/> + <details key="name" value="title"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="pages" unique="false" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//Int" unsettable="true"> + <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> + <details key="kind" value="element"/> + <details key="name" value="pages"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="author" lowerBound="1" + eType="#//Writer"> + <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> + <details key="kind" value="element"/> + <details key="name" value="author"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Library"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"> + <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> + <details key="kind" value="element"/> + <details key="name" value="name"/> + </eAnnotations> + </eStructuralFeatures> + <eStructuralFeatures xsi:type="ecore:EReference" name="books" upperBound="-1" + eType="#//Book" containment="true"> + <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> + <details key="kind" value="element"/> + <details key="name" value="books"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Writer"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" unique="false" lowerBound="1" + eType="ecore:EDataType http://www.eclipse.org/emf/2003/XMLType#//String"> + <eAnnotations source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData"> + <details key="kind" value="element"/> + <details key="name" value="name"/> + </eAnnotations> + </eStructuralFeatures> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="GuideBookWriter" eSuperTypes="#//Writer"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="countries" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="SpecialistBookWriter" eSuperTypes="#//Writer"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="subject" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/> + </eClassifiers> +</ecore:EPackage> \ No newline at end of file diff --git a/src/main/scala/org/rosi_project/model_sync/generator/conversion/EmfTypeTranslator.scala b/src/main/scala/org/rosi_project/model_sync/generator/conversion/EmfTypeTranslator.scala index b95c358cc41578ff0233697c0a4c5b3957b14b2e..ec1ea7f800a84025ab434afb41480ab845af7208 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/conversion/EmfTypeTranslator.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/conversion/EmfTypeTranslator.scala @@ -15,11 +15,20 @@ import org.rosi_project.model_sync.generator.acr_model.types.PredefEcoreTypes object EmfTypeTranslator { private val typeMap: Map[String, SType] = Map( + "Double" -> PredefTypes.Double, + "Float" -> PredefTypes.Float, + "Int" -> PredefTypes.Integer, + "Char" -> PredefTypes.Char, + "Byte" -> PredefTypes.Byte, + "Boolean" -> PredefTypes.Boolean, + "Long" -> PredefTypes.Long, + "Short" -> PredefTypes.Short, + "String" -> PredefTypes.String, "EBoolean" -> PredefTypes.Boolean, "EByte" -> PredefTypes.Byte, "EChar" -> PredefTypes.Char, "EDate" -> PredefTypes.Date, - "EDouble" -> PredefTypes.Double, + "EDouble" -> PredefTypes.Double, "EFloat" -> PredefTypes.Float, "EInt" -> PredefTypes.Integer, "EJavaObject" -> PredefTypes.Object, diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala index 18c6ae53effbad8c796e3833fea71362ee7065bd..88841489d71994758398b2aa5bcb632e51fd6bdb 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/sync/SumModelReadingVisitor.scala @@ -108,7 +108,7 @@ class SumModelReadingVisitor(config: GeneratorConfig) extends SModelVisitor { overrides = true) creatorSync.addMethod(methodSync) - var s = c.getAttributeConstructorParameters.map(m => s"""obj.eGet(obj.eClass().getEStructuralFeature("${m.getName}"))${if (m.getTypeName == "Boolean") ".asInstanceOf[Boolean]" else ".toString()"} """).mkString(", ") + var s = c.getAttributeConstructorParameters.map(m => s"""obj.eGet(obj.eClass().getEStructuralFeature("${m.getName}"))${if (m.getTypeName == "String") ".toString()" else s".asInstanceOf[${m.getTypeName}]"} """).mkString(", ") if (s.isEmpty()) { s = "obj" } else { diff --git a/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala b/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala index e83db03ca0e43e14eafaa8484475e403d38634b9..a3719805cc1f6806d84ad1e28907a7495575295f 100644 --- a/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala +++ b/src/main/scala/org/rosi_project/model_sync/generator/test/ApplicationTest.scala @@ -13,7 +13,8 @@ object ApplicationTest extends App { //runTestAML(Creation.rolesum) //TTC Case examples - runTTC2019(Creation.rolecomb) + runTestEmfLibrary(Creation.rolecomb) + //runTTC2019(Creation.rolecomb) //runTTC2019(Creation.rolesync) //runTTCLive2019(Creation.rolesync) @@ -83,6 +84,11 @@ object ApplicationTest extends App { new Generator(config).run() } + def runTestEmfLibrary(cre: Creation.Value): Unit = { + var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/EMFLibrary.ecore"), false, new File("assets/models"), create = cre); + new Generator(config).run() + } + def runTestShrinkingModel(cre: Creation.Value): Unit = { var config: GeneratorConfig = GeneratorConfig(Seq("assets/models/ShrinkingModel.ecore"), false, new File("assets/models"), create = cre); new Generator(config).run()