diff --git a/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3mapping.etl b/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3mapping.etl index 21ea9d39376ded368b4b448ebc2035e2165d33e0..3670f4fbbce485d5ae3e77be265dd99baa0cca52 100644 --- a/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3mapping.etl +++ b/plugins/org.etsi.mts.tdl.ttcn3/epsilon/ttcn3mapping.etl @@ -221,6 +221,29 @@ rule SimpleDT2R t.sub = s; } +//Generative, use mappings instead +rule EnumDT2E + transform dt : TDL!EnumDataType + to e : TTCN!EnumDefNamed { + guard : not useDataMapping + + e.name = dt.TTCNname(); + + var module = dt.eContainer.equivalent(); + var t = module.createTypeDefBody(); + + t.structured = new TTCN!StructuredTypeDef(); + t.structured.enumDef = e; + + e.list = new TTCN!EnumerationList(); + for (v in dt.value) { + var literal = new TTCN!Enumeration(); + literal.name = v.TTCNname(); + e.list.enums.add(literal); + } +} + + //Generative, use mappings instead rule StructuredDT2R transform dt : TDL!StructuredDataType @@ -236,6 +259,20 @@ rule StructuredDT2R t.structured.record = r; r.body = new TTCN!StructDefBody(); + + //add inherited members + //TODO: use for all members? what about equivalent()? -> needs special handling + //TODO: also unions and other constraints need special handling.. + for (m in dt.allMembers().select(e | e.eContainer() != dt)) { + var f = new TTCN!StructFieldDef(); + f.name = m.TTCNname(); + if (m.isOptional) { + f.optional = "optional"; + } + f.type = m.dataType.getTTCNType(); + r.body.defs.add(f); + } + } //Generative, use mappings instead @@ -349,6 +386,9 @@ rule TC2FD fd.runsOn = new TTCN!RunsOnSpec(); fd.runsOn.component = mtc.structured.component; + fd.system = new TTCN!SystemSpec(); + fd.system.component = sut.structured.component; + fd.statement = new TTCN!StatementBlock(); var sl = new TTCN!FunctionStatementList(); @@ -405,7 +445,6 @@ rule TC2FD if (simulateSUT or (c.endPoint.get(0).component.role = TDL!ComponentInstanceRole#Tester and c.endPoint.get(1).component.role = TDL!ComponentInstanceRole#Tester )) { - var s = new TTCN!FunctionStatement(); s.configuration = new TTCN!ConfigurationStatements(); s.configuration.connect = new TTCN!ConnectStatement(); @@ -418,6 +457,11 @@ rule TC2FD c.endPoint.get(1).component.role = TDL!ComponentInstanceRole#SUT )) { //skip } else { + //FIXED:confusion between different system interfaces if multiple configurations include the same SUT component.. +// var p1 = c.endPoint.get(0).equivalent(); +// var p2 = c.endPoint.get(1).equivalent(); +// ("MAP: "+p1.component.getComponentName()+":"+p1.port.name +// +"->"+p2.component.getComponentName()+":"+p2.port.name).println(); var s = new TTCN!FunctionStatement(); s.configuration = new TTCN!ConfigurationStatements(); s.configuration.map = new TTCN!MapStatement(); @@ -581,7 +625,12 @@ rule CT2C c.name = ct.TTCNname(); var m = ct.eContainer.equivalent(); - var t = m.createTypeDefBody(); + var t = m.createTypeDefBody(); + + if (ct.extension.isDefined()) { + c.`extends`.add(ct.extension.extending.equivalent()); + //(ct+"->"+ct.extension.extending.equivalent()).println(); + } t.structured = new TTCN!StructuredTypeDef(); t.structured.component = c; @@ -731,6 +780,7 @@ rule SimpleDI2TD and not di.isValue() and di.dataType.name <> "Verdict" and di.dataType.name <> "Boolean" + and not di.eContainer.isKindOf(TDL!EnumDataType) var md = new TTCN!ModuleDefinition(); md.def = td;